diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,bBIAANyFAAAIAAAAGAAAAAASAADshQAAiBIAAPuFAAAAAAAAAQAAADgAAAAAAAAAABIAADqGAAAAEgAAZ4YAAAASAACjhgAAABIAAK+GAABsEgAAzYYAAAgAAABoAAAAABIAAOWGAABsEgAA/IYAAAAAAACAAAAAABIAAAqHAABsEgAAG4cAAAAAAACYAAAAABIAACmHAABsEgAA6ogAAAAAAACwAAAAABIAAAeJAABsEgAAcYkAAAAAAADIAAAAABIAAHqJAABsEgAAgokAAAEAAABIAAAAbBIAAJGKAAAAAAAA8AAAAAASAAC0igAAbBIAAOCKAAAAAAAACAEAAAASAADuigAAbBIAAPuKAAAAAAAAIAEAAAASAAAFiwAAbBIAABGNAAAAAAAASAAAAGwSAAAajQAAAAAAAFAAAABsEgAAJY0AAAEAAACYAAAAbBIAAMCOAAABAAAAIAEAAGwSAADLjgAAAAAAAHgBAAAAEgAA2o4AAGwSAAAsjwAAAQAAAHgBAAAAEgAAUI8AAGwSAACNjwAAAQAAAMgAAABsEgAA8o8AAAEAAAAIAQAAbBIAAAGQAAABAAAAgAAAAAASAABmkQAAbBIAAKKRAAABAAAA4AEAAAASAACvkQAAbBIAAOSRAAAAAAAA4AEAAGwSAABGkgAAAAAAAAgCAAAAEgAAWpIAAGwSAABzkgAAAQAAAAgCAABsEgAAzZIAAAEAAABQAAAAbBIAANeSAAABAAAA8AAAAGwSAAC2kwAAAQAAALAAAAAAEgAAZpYAAAASAACllgAAABIAAOOWAAAAEgAAKZcAAAASAABmlwAAABIAAIWXAAAAEgAApJcAAAASAADDlwAAABIAAOKXAAAAEgAAAZgAAIgSAAA+mAAAAAAAAAEAAAA4AAAAAAAAAIgSAAB9mAAAAAAAAAEAAAA4AAAAAAAAAAASAABDpAAAKBIAAKOkAADoAgAAAAAAACgSAABQpAAA+AIAAAAAAAAAEgAAcaQAACgSAAB+pAAA2AIAAAAAAAAoEgAAqaUAAOgCAAAAAAAAKBIAAIWlAAAQAwAAAAAAACgSAADLpQAA6AIAAAAAAABQEgAA86UAAGwSAAD1pQAAAAAAAEADAABQEgAA+KUAAFASAAD7pQAAUBIAAP2lAABQEgAA/6UAAFASAAABpgAAUBIAAAOmAABQEgAABaYAAFASAAAHpgAAUBIAAAmmAABQEgAAC6YAAFASAAANpgAAUBIAAA+mAABQEgAAEaYAACgSAAATpgAA2AIAAAAAAADkpgAAlCQAAJgkAACcJAAAoCQAAKQkAACkJAAApCQAAKQkAACqJAAAsiQAALokAADCJAAAyiQAANIkAADaJAAAwiQAAOIkAADiJAAA4iQAAOIkAADoJAAA8CQAAPgkAAAAJQAACCUAABAlAAAYJQAAACUAAP8AAP///wD/AP8A/wD///8AAP///wD///8AAP8DAAAAAQAAAAAAAAACAAAAAQAAAAMAAAACAAAAAAAAAAEAAAAAAAAAAgAAAAQAAAABAAAADAAAAAEAAAAQAAAAAgAAABQAAAABAAAAJAAAAAEAAAAoAAAAAQAAACwAAAABAAAAMAAAAAIAAAA0AAAAAQAAADwAAAABAAAAQAAAAAIAAABEAAAAAgAAAEwAAAABAAAAXAAAAAEAAABsAAAAAgAAAHQAAAAAAIA/zczMPQrXIzxvEoM6F7fROKzFJze9N4Y1lb/WM3fMKzJfcIkwAAAAAAAAQEAAAEBBAACYQQAAAAAAAAAAAABQQQAAAAAAAOBAAACAQQAAgEAAAABBAAD4QQAAAAAAALhBAAC4QQAAMEEAADBBAACoQQAAAAAAABBBAAC4QQAAoEAAADBBAABcQgAAkEEAALhBAAAQQQAAMEEAAKBAAACSQgAAAAAAAIhBAACIQQAAEEEAABBBAABcQgAAAAAAAIhBAACIQQAAEEEAABBBCAAAACAAAABIAwAAQAAAAJgDAABAAAAAkAMAALADAABAAAAAYAMAAEAAAACwAwAAYAMAAEAAAABAAAAAYAMAAGADAACQAwAAsAMAAJADAACQAwAAsAMAALADAABgAwAAkAMAAGADAACQAwAAkAMAAEADAACwAwAAsAMAALADAABAAAAAQAAAAEAAAACYAwAASAAAAEAAAACYAwAAQAAAAGADAACYAwAAUAAAAJADAABAAwAAkAMAALADAABAAAAAQAAAAEAAAAAgAAAAQAAAAGADAACwAwAAQAAAAEAAAABAAAAAYAMAALADAABAAAAAIAAAAJADAABgAwAAQAAAAEAAAABgAwAAkAMAAEADAACIAAAAQAMAAEAAAABAAAAAYAMAAEAAAAAgAAAAkAMAAGADAAAgAAAAQAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAAQAIAAEADAACwAAAAkAMAACAAAABAAAAAQAMAAKAAAACQAwAAkAMAAEADAACwAAAAIAAAACAAAACwAAAAoAAAAEAAAABAAAAAQAAAACgBAACwAwAAsAMAALADAACwAwAAKAEAADgBAACwAwAAsAMAADgBAACQDgAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAD65AAAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAOAAAUDwAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAC6QAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QVfcIkA/wkvDwEAAAAAAAAA2AIAAAEAAAACAAAAAwAAAAQAAAAFAAAAAQAAAAEAAAABAAAAAAAAAAADAAABAAAABQAAAAMAAAAEAAAABQAAAAIAAAACAAAAAgAAAAAAAAAwAwAAAQAAAAYAAAADAAAABAAAAAYAAAAAAAAAIAMAAAEAAAAHAAAAAwAAAAQAAAAHAAAAAAAAAMADAAABAAAACAAAAAMAAAAEAAAABQAAAAMAAAADAAAAAwAAACAA/wAAAGltZ3VpLmluaQBpbWd1aV9sb2cudHh0AGZpbGVuYW1lICYmIGZpbGVfb3Blbl9tb2RlAGltZ3VpL2ltZ3VpLmNwcABJbUZpbGVMb2FkVG9NZW1vcnkAQ291bnQgPD0gKChpbnQpKHNpemVvZihQb3MpL3NpemVvZigqUG9zKSkpAFVwZGF0ZQBpdGVtc19oZWlnaHQgPiAwLjBmAERpc3BsYXlTdGFydCA+PSAwICYmIERpc3BsYXlFbmQgPj0gMAAjTU9WRQAoZmxhZ3MgJiAoSW1HdWlIb3ZlcmVkRmxhZ3NfUm9vdFdpbmRvdyB8IEltR3VpSG92ZXJlZEZsYWdzX0NoaWxkV2luZG93cykpID09IDAAZy5JTy5EZWx0YVRpbWUgPj0gMC4wZiAmJiAiTmVlZCBhIHBvc2l0aXZlIERlbHRhVGltZSAoemVybyBpcyB0b2xlcmF0ZWQgYnV0IHdpbGwgY2F1c2Ugc29tZSB0aW1pbmcgaXNzdWVzKSIAZy5JTy5EaXNwbGF5U2l6ZS54ID49IDAuMGYgJiYgZy5JTy5EaXNwbGF5U2l6ZS55ID49IDAuMGYgJiYgIkludmFsaWQgRGlzcGxheVNpemUgdmFsdWUiAGcuSU8uRm9udHMtPkZvbnRzLlNpemUgPiAwICYmICJGb250IEF0bGFzIG5vdCBjcmVhdGVkLiBEaWQgeW91IGNhbGwgaW8uRm9udHMtPkdldFRleERhdGFBc1JHQkEzMiAvIEdldFRleERhdGFBc0FscGhhOCA/IgBnLklPLkZvbnRzLT5Gb250c1swXS0+SXNMb2FkZWQoKSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekQsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUNELG9IQUFvSDtJQUNwSCxPQUFPLEtBQWlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxvRkFBb0Y7SUFDcEYsUUFBUSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV6Qyw4REFBOEQ7SUFDOUQsb0pBQW9KO0lBQ3BKLE1BQU0sQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxJQUFZLEdBQUc7UUFDbkQsTUFBTSxLQUFLLEdBQTBCLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBMEIsQ0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUEwQixDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCwySkFBMko7SUFDM0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxJQUFZLEdBQUc7UUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBM0RELDBCQTJEQztBQUVZLFFBQUEsd0JBQXdCLEdBQVcsR0FBRyxDQUFDO0FBSXBELGlKQUFpSjtBQUNqSjtJQUNJLFlBQW1CLE1BQXNDO1FBQXRDLFdBQU0sR0FBTixNQUFNLENBQWdDO0lBQUcsQ0FBQztJQUM3RCxNQUFNLEtBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakYsMkZBQTJGO0lBQzNGLElBQVcsU0FBUyxLQUErQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLDJGQUEyRjtJQUMzRixJQUFXLEtBQUssS0FBK0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRSwyRkFBMkY7SUFDM0YsSUFBVyxRQUFRLEtBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRCwyRkFBMkY7SUFDM0YsSUFBVyxRQUFRLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUUvRCxvQkFBb0I7SUFDcEIsK0hBQStIO0lBQy9ILElBQVcsU0FBUyxLQUFtQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQVcsU0FBUyxDQUFDLEtBQW1CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1RSxvQ0FBb0M7SUFDcEMsa0dBQWtHO0lBQ2xHLDJGQUEyRjtJQUMzRixJQUFXLFFBQVEsS0FBb0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNyRSxrSkFBa0o7SUFDbEosSUFBVyxHQUFHLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQVcsR0FBRyxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsNEZBQTRGO0lBQzVGLElBQVcsVUFBVSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBVyxVQUFVLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEUsMkZBQTJGO0lBQzNGLElBQVcsT0FBTyxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDNUQsdUZBQXVGO0lBQ3ZGLElBQVcsUUFBUSxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLDRGQUE0RjtJQUM1RixJQUFXLFNBQVMsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQVcsU0FBUyxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLG1JQUFtSTtJQUNuSSxJQUFXLGNBQWMsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQVcsY0FBYyxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLDRGQUE0RjtJQUM1RixJQUFXLFlBQVksS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQVcsWUFBWSxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTVFLHNGQUFzRjtJQUN0RiwyREFBMkQ7SUFDcEQsV0FBVyxDQUFDLEdBQVcsRUFBRSxXQUFtQixJQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hILHlGQUF5RjtJQUNsRixXQUFXLENBQUMsR0FBVyxFQUFFLElBQVksRUFBRSxXQUEwQixJQUFJLElBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVJLG9GQUFvRjtJQUM3RSxZQUFZLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3hFO0FBakRELDhEQWlEQztBQUlELCtJQUErSTtBQUMvSSxtSkFBbUo7QUFDbko7SUFDSSxZQUFtQixNQUE0QztRQUE1QyxXQUFNLEdBQU4sTUFBTSxDQUFzQztJQUFHLENBQUM7SUFDbkUsTUFBTSxLQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpGLElBQUksUUFBUSxLQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBSSxHQUFHLEtBQXNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxJQUFJLFdBQVcsS0FBc0MsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNGLElBQUksV0FBVyxLQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDcEY7QUFSRCwwRUFRQztBQUVEO0lBSUksSUFBVyxTQUFTLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFXLFdBQVcsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLElBQVcsVUFBVSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBVyxNQUFNLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUFXLFlBQVksS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLElBQVcsVUFBVSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFbEUsbUxBQW1MO0lBQ25MLG9NQUFvTTtJQUNwTSx5S0FBeUs7SUFDekssd09BQXdPO0lBQ3hPLFlBQVksY0FBc0IsQ0FBQyxDQUFDLEVBQUUsZUFBdUIsQ0FBQyxHQUFHO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCwwS0FBMEs7SUFDMUssTUFBTTtRQUNGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCwyTEFBMkw7SUFDcEwsSUFBSTtRQUNQLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxpS0FBaUs7SUFDMUosS0FBSyxDQUFDLFdBQW1CLEVBQUUsWUFBb0I7UUFDbEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELDZJQUE2STtJQUN0SSxHQUFHO1FBQ04sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUFDLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztDQUNKO0FBaERELDRDQWdEQztBQWNELHdFQUF3RTtBQUN4RTtJQUVJLFlBQTRCLE1BQWdDO1FBQWhDLFdBQU0sR0FBTixNQUFNLENBQTBCO0lBQUcsQ0FBQztJQUVoRSx3TUFBd007SUFDeE0sSUFBSSxTQUFTLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxpRkFBaUY7SUFDakYsSUFBSSxRQUFRLEtBQXNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRiwrTUFBK007SUFDL00sSUFBSSxTQUFTLEtBQXVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Q0FLdEU7QUFkRCw4QkFjQztBQUVELHFGQUFxRjtBQUNyRixvQkFBb0I7QUFDcEIsb0NBQW9DO0FBQ3BDLFNBQVM7QUFDVCwyQ0FBNkM7QUFBcEMscUNBQUEsYUFBYSxDQUFBO0FBR3RCLGdCQUFnQjtBQUNoQixnREFBZ0Q7QUFDaEQsMkNBQThDO0FBQXJDLHNDQUFBLGNBQWMsQ0FBQTtBQUN2QiwyQ0FBbUQ7QUFBMUMsMkNBQUEsbUJBQW1CLENBQUE7QUFDNUIsMkNBQWtEO0FBQXpDLDBDQUFBLGtCQUFrQixDQUFBO0FBQzNCLDJDQUFtRDtBQUExQywyQ0FBQSxtQkFBbUIsQ0FBQTtBQUM1QjtJQVNJLFlBQVksTUFBbUIsRUFBRSxhQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDSjtBQWRELGdDQWNDO0FBQ0QsUUFBUTtBQUNSLDRHQUE0RztBQUM1RyxrTEFBa0w7QUFDbEwscUdBQXFHO0FBQ3JHLHNPQUFzTztBQUN0Tyx5Q0FBeUM7QUFDekMsU0FBUztBQUVULGdLQUFnSztBQUNoSyw4SEFBOEg7QUFDOUg7Q0FJQztBQUpELHNDQUlDO0FBTUQ7SUFFSSxZQUE0QixNQUEyQztRQUEzQyxXQUFNLEdBQU4sTUFBTSxDQUFxQztJQUFHLENBQUM7Q0FDOUU7QUFIRCxvREFHQztBQUVELG9CQUFvQjtBQUNwQiwyTEFBMkw7QUFDM0wsMkpBQTJKO0FBQzNKLDBGQUEwRjtBQUMxRixnUkFBZ1I7QUFDaFIsa01BQWtNO0FBQ2xNO0lBRUksWUFBNEIsTUFBaUM7UUFBakMsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7SUFBRyxDQUFDO0lBRWpFLGVBQWUsQ0FBQyxRQUEwRDtRQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQWtDLEVBQUUsU0FBaUIsRUFBUSxFQUFFO1lBQ3hGLFFBQVEsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMseUlBQXlJO0lBQ3pJLGtIQUFrSDtJQUNsSCxJQUFJLFNBQVMsS0FBaUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3RCxnRUFBZ0U7SUFDaEUsSUFBSSxTQUFTLEtBQWlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFN0Qsd0NBQXdDO0lBQ3hDLGdJQUFnSTtJQUNoSSxvS0FBb0s7SUFDcEssOEZBQThGO0lBQzlGLDhFQUE4RTtJQUM5RSxrS0FBa0s7SUFDbEssa0tBQWtLO0lBQ2xLLDREQUE0RDtJQUM1RCw0REFBNEQ7SUFDNUQsa0ZBQWtGO0lBQ2xGLHVGQUF1RjtJQUN2RiwyRkFBMkY7SUFDM0Ysa0tBQWtLO0lBRWxLLDJHQUEyRztJQUMzRyx1Q0FBdUM7SUFDdkMsZ1ZBQWdWO0lBQ3pVLFlBQVksQ0FBQyxhQUE4QyxFQUFFLGFBQThDLEVBQUUsbUNBQTRDLEtBQUs7UUFDakssSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFDRCw0Q0FBNEM7SUFDckMsc0JBQXNCLEtBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxpQ0FBaUM7SUFDMUIsV0FBVyxLQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELGdFQUFnRTtJQUNoRSxrQ0FBa0M7SUFDbEMsa0hBQWtIO0lBQ2xILGtIQUFrSDtJQUVsSCxhQUFhO0lBQ2IsZ0dBQWdHO0lBQ3pGLE9BQU8sQ0FBQyxDQUFrQyxFQUFFLENBQWtDLEVBQUUsR0FBZSxFQUFFLFlBQW9CLEdBQUc7UUFDM0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELHFSQUFxUjtJQUM5USxPQUFPLENBQUMsQ0FBa0MsRUFBRSxDQUFrQyxFQUFFLEdBQWUsRUFBRSxXQUFtQixHQUFHLEVBQUUscUNBQTJFLEVBQUUsWUFBb0IsR0FBRztRQUNoTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUNELDhNQUE4TTtJQUN2TSxhQUFhLENBQUMsQ0FBa0MsRUFBRSxDQUFrQyxFQUFFLEdBQWUsRUFBRSxXQUFtQixHQUFHLEVBQUUscUNBQTJFO1FBQzdNLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCwrSkFBK0o7SUFDeEosdUJBQXVCLENBQUMsQ0FBa0MsRUFBRSxDQUFrQyxFQUFFLFlBQXdCLEVBQUUsYUFBeUIsRUFBRSxhQUF5QixFQUFFLFlBQXdCO1FBQzNNLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0Qsa0lBQWtJO0lBQzNILE9BQU8sQ0FBQyxDQUFrQyxFQUFFLENBQWtDLEVBQUUsQ0FBa0MsRUFBRSxDQUFrQyxFQUFFLEdBQWUsRUFBRSxZQUFvQixHQUFHO1FBQ25NLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELGdIQUFnSDtJQUN6RyxhQUFhLENBQUMsQ0FBa0MsRUFBRSxDQUFrQyxFQUFFLENBQWtDLEVBQUUsQ0FBa0MsRUFBRSxHQUFlO1FBQ2hMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QscUhBQXFIO0lBQzlHLFdBQVcsQ0FBQyxDQUFrQyxFQUFFLENBQWtDLEVBQUUsQ0FBa0MsRUFBRSxHQUFlLEVBQUUsWUFBb0IsR0FBRztRQUNuSyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELG1HQUFtRztJQUM1RixpQkFBaUIsQ0FBQyxDQUFrQyxFQUFFLENBQWtDLEVBQUUsQ0FBa0MsRUFBRSxHQUFlO1FBQ2hKLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELDJIQUEySDtJQUNwSCxTQUFTLENBQUMsTUFBdUMsRUFBRSxNQUFjLEVBQUUsR0FBZSxFQUFFLGVBQXVCLEVBQUUsRUFBRSxZQUFvQixHQUFHO1FBQ3pJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QseUdBQXlHO0lBQ2xHLGVBQWUsQ0FBQyxNQUF1QyxFQUFFLE1BQWMsRUFBRSxHQUFlLEVBQUUsZUFBdUIsRUFBRTtRQUN0SCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsOEdBQThHO0lBQ3ZHLE9BQU8sQ0FBQyxHQUFvQyxFQUFFLEdBQWUsRUFBRSxVQUFrQixFQUFFLFdBQTBCLElBQUk7UUFDcEgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELHFOQUFxTjtJQUM5TSxZQUFZLENBQUMsSUFBWSxFQUFFLFNBQWlCLEVBQUUsR0FBb0MsRUFBRSxHQUFlLEVBQUUsVUFBa0IsRUFBRSxXQUEwQixJQUFJLEVBQUUsYUFBcUIsR0FBRyxFQUFFLHFCQUE2RCxJQUFJO1FBQ3ZQLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBQ0QsdUxBQXVMO0lBQ3ZMLGlTQUFpUztJQUNqUyxtTkFBbU47SUFDbk4sb0hBQW9IO0lBQ3BILDhGQUE4RjtJQUM5RixrS0FBa0s7SUFDM0osY0FBYyxDQUFDLElBQXFDLEVBQUUsR0FBb0MsRUFBRSxHQUFvQyxFQUFFLElBQXFDLEVBQUUsR0FBZSxFQUFFLFlBQW9CLEdBQUcsRUFBRSxlQUF1QixDQUFDO1FBQzlPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ25GLENBQUM7Q0FxQ0o7QUE1SUQsZ0NBNElDO0FBRUQseUNBQXlDO0FBQ3pDO0lBRUksWUFBNEIsTUFBaUM7UUFBakMsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7SUFBRyxDQUFDO0lBRWpFLGdCQUFnQixDQUFDLFFBQXlDO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxTQUFvQyxFQUFRLEVBQUU7WUFDeEUsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMkhBQTJIO0lBQzNILElBQUksS0FBSyxLQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEQsNEJBQTRCO0lBQzVCLGlDQUFpQztJQUNqQyxJQUFJLGFBQWEsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLG1HQUFtRztJQUNuRyxJQUFJLGFBQWEsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLG1HQUFtRztJQUNuRyxJQUFJLGFBQWEsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRWpFLFlBQVk7SUFDWixzR0FBc0c7SUFDdEcsK1FBQStRO0lBQy9RLGdSQUFnUjtJQUN6USxjQUFjLENBQUMsRUFBbUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNKO0FBM0JELGdDQTJCQztBQUVEO0NBcUJDO0FBckJELG9DQXFCQztBQUVELHFCQUFxQjtBQUNyQjtDQU1DO0FBTkQsa0NBTUM7QUFFRCxpRUFBaUU7QUFDakUsc0dBQXNHO0FBQ3RHLDBFQUEwRTtBQUMxRSw0R0FBNEc7QUFDNUcsMkZBQTJGO0FBQzNGLHlFQUF5RTtBQUN6RSxpS0FBaUs7QUFDakssc09BQXNPO0FBQ3RPO0lBRUksWUFBNEIsTUFBa0M7UUFBbEMsV0FBTSxHQUFOLE1BQU0sQ0FBNEI7SUFBRyxDQUFDO0lBRWxFLDJCQUEyQjtJQUMzQiw0QkFBNEI7SUFDNUIscUVBQXFFO0lBQ3JFLG1GQUFtRjtJQUNuRixvS0FBb0s7SUFDcEssd1VBQXdVO0lBQ3hVLGlUQUFpVDtJQUNqVCwrVUFBK1U7SUFDL1UsNkpBQTZKO0lBQzdKLGdIQUFnSDtJQUNoSCw2SEFBNkg7SUFDN0gsdUVBQXVFO0lBRXZFLG9DQUFvQztJQUNwQyx5SkFBeUo7SUFDekosaU1BQWlNO0lBQ2pNLGlDQUFpQztJQUNqQyxxSkFBcUo7SUFDckoscUtBQXFLO0lBQ3JLLHNLQUFzSztJQUN0SyxrQkFBa0I7UUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCwwRUFBMEU7SUFFMUUsNkNBQTZDO0lBQzdDLGVBQWU7SUFDZiw2Q0FBNkM7SUFFN0Msb0hBQW9IO0lBQ3BILGlMQUFpTDtJQUNqTCx5RkFBeUY7SUFDekYseUZBQXlGO0lBQ3pGLG9JQUFvSTtJQUNwSSxpSUFBaUk7SUFDakkscUdBQXFHO0lBQ3JHLHVGQUF1RjtJQUV2Rix3SEFBd0g7SUFDeEgsNEJBQTRCO0lBQzVCLElBQUk7SUFDSixtR0FBbUc7SUFDbkcscUhBQXFIO0lBQ3JILGdHQUFnRztJQUNoRyw4R0FBOEc7SUFDOUcsbUdBQW1HO0lBQ25HLCtJQUErSTtJQUMvSSxnTUFBZ007SUFDaE0sdUdBQXVHO0lBQ3ZHLEtBQUs7SUFFTCw2Q0FBNkM7SUFDN0MsK0JBQStCO0lBQy9CLDZDQUE2QztJQUU3QywrS0FBK0s7SUFDL0ssK0tBQStLO0lBQy9LLG9CQUFvQjtJQUNwQixJQUFJO0lBQ0osdUpBQXVKO0lBQ3ZKLGlGQUFpRjtJQUNqRiw4RUFBOEU7SUFDOUUsOEdBQThHO0lBQzlHLG9IQUFvSDtJQUNwSCwyR0FBMkc7SUFDM0cscUpBQXFKO0lBQ3JKLHNEQUFzRDtJQUN0RCxLQUFLO0lBRUwsMk9BQTJPO0lBQzNPLHVPQUF1TztJQUN2Tyx3R0FBd0c7SUFDeEcsd0hBQXdIO0lBRXhILDZDQUE2QztJQUM3QyxVQUFVO0lBQ1YsNkNBQTZDO0lBRTdDLG1OQUFtTjtJQUNuTixJQUFJLEtBQUssS0FBdUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLElBQUksS0FBSyxDQUFDLEtBQXVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLDJQQUEyUDtJQUMzUCxxSEFBcUg7SUFFckgsYUFBYTtJQUNiLDRGQUE0RjtJQUM1RixnSkFBZ0o7SUFDaEosb0pBQW9KO0lBQ3BKLDhGQUE4RjtJQUM5RixJQUFJLFFBQVEsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELCtGQUErRjtJQUMvRixJQUFJLFNBQVMsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0NBTTVEO0FBckdELGtDQXFHQztBQUVELGtDQUFrQztBQUNsQyw4SEFBOEg7QUFDOUg7SUFFSSxZQUE0QixNQUE2QjtRQUE3QixXQUFNLEdBQU4sTUFBTSxDQUF1QjtJQUFHLENBQUM7SUFFN0QsNEJBQTRCO0lBQzVCLDJJQUEySTtJQUMzSSx1S0FBdUs7SUFDdkssd0dBQXdHO0lBQ3hHLGlGQUFpRjtJQUNqRixvTkFBb047SUFDcE4saUhBQWlIO0lBQ2pILG9GQUFvRjtJQUNwRixnRkFBZ0Y7SUFDaEYsMElBQTBJO0lBRTFJLDZCQUE2QjtJQUM3Qiw4TEFBOEw7SUFDOUwsK0dBQStHO0lBQy9HLGtHQUFrRztJQUNsRyxtSUFBbUk7SUFDbkksa05BQWtOO0lBRWxOLFVBQVU7SUFDVixzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLGlEQUFpRDtJQUNqRCxrREFBa0Q7SUFDbEQsMERBQTBEO0lBQzFELDBEQUEwRDtJQUMxRCx1SkFBdUo7SUFDdkoscUdBQXFHO0lBQ3JHLDBIQUEwSDtJQUMxSCxZQUFZLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBaUJoRTtBQWpERCx3QkFpREM7QUFFRCw4REFBOEQ7QUFDOUQ7SUEyQ0k7UUExQ0EsVUFBSyxHQUFXLEdBQUcsQ0FBQyxDQUFxQyw4Q0FBOEM7UUFDL0Ysa0JBQWEsR0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUywwQkFBMEI7UUFFbkYsbUJBQWMsR0FBVyxHQUFHLENBQUMsQ0FBNEIsNkVBQTZFO1FBQ3RJLHFCQUFnQixHQUFXLEdBQUcsQ0FBQyxDQUEwQixnSUFBZ0k7UUFDakwsa0JBQWEsR0FBVyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBTyxzQkFBc0I7UUFFdkUscUJBQWdCLEdBQVcsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsOEZBQThGO1FBRXZKLGtCQUFhLEdBQVcsR0FBRyxDQUFDLENBQTZCLG9GQUFvRjtRQUM3SSxvQkFBZSxHQUFXLEdBQUcsQ0FBQyxDQUEyQixzSUFBc0k7UUFDL0wsa0JBQWEsR0FBVyxHQUFHLENBQUMsQ0FBNkIsMkNBQTJDO1FBQ3BHLG9CQUFlLEdBQVcsR0FBRyxDQUFDLENBQTJCLHNJQUFzSTtRQUN2TCxpQkFBWSxHQUFXLElBQUksTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLDJEQUEyRDtRQUVwSCxrQkFBYSxHQUFXLEdBQUcsQ0FBQyxDQUE2QixrR0FBa0c7UUFDM0osb0JBQWUsR0FBVyxHQUFHLENBQUMsQ0FBMkIsK0hBQStIO1FBQ2hMLGdCQUFXLEdBQVcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsd0RBQXdEO1FBRXpHLHFCQUFnQixHQUFXLElBQUksTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFNLDZHQUE2RztRQUU5SixzQkFBaUIsR0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBSyxxT0FBcU87UUFFOVIsa0JBQWEsR0FBVyxJQUFJLENBQUMsQ0FBNEIscUdBQXFHO1FBQzlKLHNCQUFpQixHQUFXLEdBQUcsQ0FBQyxDQUF5QixpREFBaUQ7UUFDMUcsa0JBQWEsR0FBVyxJQUFJLENBQUMsQ0FBNEIsc0VBQXNFO1FBQy9ILHNCQUFpQixHQUFXLEdBQUcsQ0FBQyxDQUF5Qix1Q0FBdUM7UUFDaEcsZ0JBQVcsR0FBVyxJQUFJLENBQUMsQ0FBOEIsMkRBQTJEO1FBQ3BILGlCQUFZLEdBQVcsR0FBRyxDQUFDLENBQThCLGtGQUFrRjtRQUNuSSxvQkFBZSxHQUFXLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFHLDBIQUEwSDtRQUUzSyx5QkFBb0IsR0FBVyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQSwySEFBMkg7UUFFNUssMkJBQXNCLEdBQVcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsMklBQTJJO1FBRXBNLHFCQUFnQixHQUFZLElBQUksQ0FBQyxDQUF3QixxRkFBcUY7UUFDOUksb0JBQWUsR0FBWSxJQUFJLENBQUMsQ0FBeUIsNEVBQTRFO1FBQ3JJLHlCQUFvQixHQUFXLElBQUksQ0FBQyxDQUFxQixtTUFBbU07UUFDcFAsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUsxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQW5ERCxnQkFBZ0IsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBSXhFLGdCQUFnQixLQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFeEUsbUJBQW1CLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBTTlFLGVBQWUsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBSXRFLGNBQWMsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRXBFLG1CQUFtQixLQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUU5RSxvQkFBb0IsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFRaEYsa0JBQWtCLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUU1RSx1QkFBdUIsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFdEYseUJBQXlCLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBSzFGLFdBQVcsQ0FBQyxLQUFhLElBQTJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixXQUFXLENBQUMsS0FBYSxFQUFFLEtBQXNDLElBQWEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQWVySCxhQUFhLENBQUMsWUFBb0I7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVEO0lBRUksWUFBNEIsV0FBc0MsSUFBSSxpQkFBaUIsRUFBRTtRQUE3RCxhQUFRLEdBQVIsUUFBUSxDQUFxRDtRQThCbEYsV0FBTSxHQUE0QixJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDbkQsR0FBRyxFQUFFLENBQUMsTUFBK0IsRUFBRSxHQUFnQixFQUFrQyxFQUFFO2dCQUN2RixFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFBQyxNQUFNLGdCQUFxQjtnQkFBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELEdBQUcsRUFBRSxDQUFDLE1BQStCLEVBQUUsR0FBZ0IsRUFBRSxLQUFzQyxFQUFXLEVBQUU7Z0JBQ3hHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekQsQ0FBQztTQUNKLENBQUMsQ0FBQztJQXRDeUYsQ0FBQztJQUU3RixJQUFJLEtBQUssS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxLQUFLLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0csSUFBSSxhQUFhLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLElBQUksY0FBYyxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGNBQWMsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqSixJQUFJLGdCQUFnQixLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksZ0JBQWdCLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6SixJQUFJLGFBQWEsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsSUFBSSxnQkFBZ0IsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsSUFBSSxhQUFhLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksYUFBYSxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdJLElBQUksZUFBZSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGVBQWUsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNySixJQUFJLGFBQWEsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxhQUFhLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0ksSUFBSSxlQUFlLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksZUFBZSxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JKLElBQUksWUFBWSxLQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckYsSUFBSSxhQUFhLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksYUFBYSxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdJLElBQUksZUFBZSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGVBQWUsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNySixJQUFJLFdBQVcsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25GLElBQUksZ0JBQWdCLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdGLElBQUksaUJBQWlCLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9GLElBQUksYUFBYSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGFBQWEsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3SSxJQUFJLGlCQUFpQixLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksaUJBQWlCLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3SixJQUFJLGFBQWEsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxhQUFhLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0ksSUFBSSxpQkFBaUIsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGlCQUFpQixDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0osSUFBSSxXQUFXLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksV0FBVyxDQUFDLEtBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JJLElBQUksWUFBWSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLFlBQVksQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6SSxJQUFJLGVBQWUsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsSUFBSSxvQkFBb0IsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckcsSUFBSSxzQkFBc0IsS0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekcsSUFBSSxnQkFBZ0IsS0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGdCQUFnQixDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0osSUFBSSxlQUFlLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksZUFBZSxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZKLElBQUksb0JBQW9CLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxvQkFBb0IsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBV2xLLElBQUksQ0FBQyxLQUEyQjtRQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGlCQUFzQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxhQUFhLENBQUMsWUFBb0IsSUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEc7QUE5RUQsZ0NBOEVDO0FBRUQsNEVBQTRFO0FBQzVFLGtFQUFrRTtBQUNsRTtJQUlJLFlBQTRCLE1BQThCO1FBQTlCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBVzFELDJJQUEySTtRQUMzSSxxSEFBcUg7UUFDckgsMEpBQTBKO1FBQzFKLDBHQUEwRztRQUMxRywwSUFBMEk7UUFDMUksMkhBQTJIO1FBQzNILHlIQUF5SDtRQUNsSCxXQUFNLEdBQWEsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3BDLEdBQUcsRUFBRSxDQUFDLE1BQWdCLEVBQUUsR0FBZ0IsRUFBVSxFQUFFO2dCQUNoRCxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFBQyxNQUFNLGdCQUFxQjtnQkFBQyxDQUFDO2dCQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELEdBQUcsRUFBRSxDQUFDLE1BQWdCLEVBQUUsR0FBZ0IsRUFBRSxLQUFhLEVBQVcsRUFBRTtnQkFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBdURILDJUQUEyVDtRQUNwVCxjQUFTLEdBQWMsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3hDLEdBQUcsRUFBRSxDQUFDLE1BQWlCLEVBQUUsR0FBZ0IsRUFBb0IsRUFBRTtnQkFDM0QsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFBQyxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUNELEdBQUcsRUFBRSxDQUFDLE1BQWlCLEVBQUUsR0FBZ0IsRUFBRSxLQUFjLEVBQVcsRUFBRTtnQkFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBY0gsbUpBQW1KO1FBQzVJLGFBQVEsR0FBYyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDdkMsR0FBRyxFQUFFLENBQUMsTUFBaUIsRUFBRSxHQUFnQixFQUFvQixFQUFFO2dCQUMzRCxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2dCQUFDLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsR0FBRyxFQUFFLENBQUMsTUFBaUIsRUFBRSxHQUFnQixFQUFFLEtBQWMsRUFBVyxFQUFFO2dCQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELENBQUM7U0FDSixDQUFDLENBQUM7UUE4Qkgsb0VBQW9FO1FBQ3BFLHFGQUFxRjtRQUNyRixvRUFBb0U7UUFFcEUsK0lBQStJO1FBQy9JLDBFQUEwRTtRQUMxRSxrR0FBa0c7UUFDbEcsa0ZBQWtGO1FBQ2xGLG1GQUFtRjtRQUNuRixrRkFBa0Y7UUFDbEYscUxBQXFMO1FBQ3JMLDRHQUE0RztRQUNyRyxzQkFBaUIsR0FBYSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDL0MsR0FBRyxFQUFFLENBQUMsTUFBZ0IsRUFBRSxHQUFnQixFQUFVLEVBQUU7Z0JBQ2hELEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUNILDBGQUEwRjtRQUMxRiw4SUFBOEk7UUFDOUksNkhBQTZIO1FBQzdILDRHQUE0RztRQUNyRyxxQkFBZ0IsR0FBYSxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDOUMsR0FBRyxFQUFFLENBQUMsTUFBZ0IsRUFBRSxHQUFnQixFQUFVLEVBQUU7Z0JBQ2hELEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztTQUNKLENBQUMsQ0FBQztJQTFLMEQsQ0FBQztJQUU5RCxvRUFBb0U7SUFDcEUseURBQXlEO0lBQ3pELG9FQUFvRTtJQUVwRSw4SEFBOEg7SUFDOUgsSUFBSSxXQUFXLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRixnSEFBZ0g7SUFDaEgsSUFBSSxTQUFTLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxJQUFJLFNBQVMsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQWlCL0QsZ0xBQWdMO0lBQ2hMLHNJQUFzSTtJQUN0SSxxSEFBcUg7SUFFckgsc0tBQXNLO0lBQ3RLLElBQUksS0FBSyxLQUFrQixNQUFNLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSw0RkFBNEY7SUFDNUYsSUFBSSxlQUFlLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNyRSxJQUFJLGVBQWUsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzRSxtSUFBbUk7SUFDbkksSUFBSSxvQkFBb0IsS0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRCxrSUFBa0k7SUFDbEksaU9BQWlPO0lBQ2pPLElBQUksdUJBQXVCLEtBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLHVMQUF1TDtJQUN2TCwrSUFBK0k7SUFFL0ksNEJBQTRCO0lBQzVCLHdXQUF3VztJQUN4VyxpSUFBaUk7SUFFakksb0VBQW9FO0lBQ3BFLDRCQUE0QjtJQUM1QixvRUFBb0U7SUFFcEUsa0RBQWtEO0lBQ2xELHlHQUF5RztJQUN6Ryx1RUFBdUU7SUFDdkUsc0RBQXNEO0lBQ3RELElBQUksaUJBQWlCLEtBQXNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzlGLElBQUksaUJBQWlCLENBQUMsS0FBc0MsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUVwRyxnQ0FBZ0M7SUFDaEMsaUpBQWlKO0lBQ2pKLHNEQUFzRDtJQUN0RCx3RUFBd0U7SUFDeEUsaUNBQWlDO0lBRWpDLHdGQUF3RjtJQUN4RixpQ0FBaUM7SUFDakMsd0NBQXdDO0lBQ3hDLHVDQUF1QztJQUV2QywwSkFBMEo7SUFDMUosK0NBQStDO0lBQy9DLHVEQUF1RDtJQUN2RCxzSEFBc0g7SUFFdEgsb0VBQW9FO0lBQ3BFLHlDQUF5QztJQUN6QyxvRUFBb0U7SUFFcEUsMkpBQTJKO0lBQzNKLElBQUksUUFBUSxLQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFXM0UsNkZBQTZGO0lBQzdGLElBQVcsVUFBVSxLQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBVyxVQUFVLENBQUMsS0FBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEUsNklBQTZJO0lBQzdJLElBQUksZUFBZSxLQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGVBQWUsQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuSixnRkFBZ0Y7SUFDaEYsSUFBSSxPQUFPLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksT0FBTyxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ILDhFQUE4RTtJQUM5RSxJQUFJLFFBQVEsS0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQUMsSUFBSSxRQUFRLENBQUMsS0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkgsNEVBQTRFO0lBQzVFLElBQUksTUFBTSxLQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLE1BQU0sQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRywwRkFBMEY7SUFDMUYsSUFBSSxRQUFRLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksUUFBUSxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBV3ZILGdLQUFnSztJQUVoSyxZQUFZO0lBQ1osa0hBQWtIO0lBQzNHLGlCQUFpQixDQUFDLENBQVMsSUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRSx3SUFBd0k7SUFDeEksOEdBQThHO0lBRTlHLG9FQUFvRTtJQUNwRSw2Q0FBNkM7SUFDN0Msb0VBQW9FO0lBRXBFLG9RQUFvUTtJQUNwUSxJQUFJLGdCQUFnQixLQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksZ0JBQWdCLENBQUMsS0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2SixnTkFBZ047SUFDaE4sSUFBSSxtQkFBbUIsS0FBYyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLG1CQUFtQixDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkssaVBBQWlQO0lBQ2pQLElBQUksYUFBYSxLQUFjLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFBQyxJQUFJLGFBQWEsQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzSSx1S0FBdUs7SUFDdkssSUFBSSxhQUFhLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUFDLElBQUksYUFBYSxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNJLDZMQUE2TDtJQUM3TCxJQUFJLFNBQVMsS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pELGlGQUFpRjtJQUNqRiwwRkFBMEY7SUFDMUYsbUhBQW1IO0lBQ25ILG9HQUFvRztJQUNwRyxzTkFBc047SUFDdE4sSUFBSSxVQUFVLEtBQXNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQWlDNUY7QUFsTEQsMEJBa0xDO0FBRUQsT0FBTztBQUNQLG1DQUFtQztBQUNuQyxtQkFBbUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUF0RSxzQkFBc0U7QUFDdEUsc0NBQXNDO0FBQ3RDLHNCQUF5QyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQWxGLDRCQUFrRjtBQUNsRixrTUFBa007QUFDbE07SUFDSSxNQUFNLFNBQVMsR0FBcUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBSEQsa0NBR0M7QUFDRCx3S0FBd0s7QUFDeEssc0JBQW1DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBckQsNEJBQXFEO0FBQ3JELDhLQUE4SztBQUM5SztJQUNJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNkLE1BQU0sRUFBRSxHQUFZLEtBQUssRUFBRSxDQUFDO0lBQzVCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQXFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2RSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ1osRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMLENBQUM7QUFDTCxDQUFDO0FBVEQsd0JBU0M7QUFDRCxxV0FBcVc7QUFDclcsc0JBQW1DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBckQsNEJBQXFEO0FBQ3JELHNDQUFzQztBQUN0QyxzQkFBbUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUFyRCw0QkFBcUQ7QUFFckQsNEJBQTRCO0FBQzVCLGlRQUFpUTtBQUNqUSx3QkFBK0IsU0FBd0MsSUFBSSxJQUFVLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQW5ILHdDQUFtSDtBQUNuSCwwTkFBME47QUFDMU4sMkJBQWtDLFNBQWlFLElBQUk7SUFDbkcsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sUUFBUSxHQUEyQixDQUFFLE1BQU0sRUFBRSxDQUFFLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFYRCw4Q0FXQztBQUNELHVPQUF1TztBQUN2Tyx5QkFBZ0MsTUFBeUIsSUFBSTtJQUN6RCxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDcEIsQ0FBQztBQUNMLENBQUM7QUFiRCwwQ0FhQztBQUNELGdFQUFnRTtBQUNoRSwyQkFBa0MsS0FBYSxJQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQW5HLDhDQUFtRztBQUNuRywrREFBK0Q7QUFDL0QsMEJBQWlDLEtBQWEsSUFBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQXZGLDRDQUF1RjtBQUN2RixvTEFBb0w7QUFDcEwsMkJBQXdDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBL0Qsc0NBQStEO0FBRS9ELFNBQVM7QUFDVCxxWkFBcVo7QUFDclosZUFBc0IsSUFBWSxFQUFFLE9BQStELElBQUksRUFBRSxRQUErQixDQUFDO0lBQ3JJLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sUUFBUSxHQUEyQixDQUFFLElBQUksRUFBRSxDQUFFLENBQUM7UUFDcEQsTUFBTSxNQUFNLEdBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDTCxDQUFDO0FBWEQsc0JBV0M7QUFDRCwwTkFBME47QUFDMU4sMkNBQW1DO0FBQTFCLDJCQUFBLEdBQUcsQ0FBQTtBQUNaLCtWQUErVjtBQUMvViwySkFBMko7QUFDM0osb0JBQTJCLEVBQXlCLEVBQUUsT0FBd0MsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFrQixLQUFLLEVBQUUsY0FBcUMsQ0FBQztJQUN0SyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsZ0NBRUM7QUFDRCxzQ0FBc0M7QUFDdEM7SUFDSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUZELDRCQUVDO0FBQ0Qsb09BQW9PO0FBQ3BPLDZCQUFvQyxNQUE2QixJQUFJLE1BQU0sRUFBRTtJQUN6RSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFGRCxrREFFQztBQUNELDJJQUEySTtBQUMzSSwrQkFBc0MsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDM0UsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRkQsc0RBRUM7QUFDRCxpR0FBaUc7QUFDakcsNENBQTBEO0FBQWpELG1EQUFBLDBCQUEwQixDQUFBO0FBQ25DLHNLQUFzSztBQUN0SyxtQ0FBMEMsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDL0UsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRkQsOERBRUM7QUFDRCxzT0FBc087QUFDdE8sbUNBQTBDLE1BQTZCLElBQUksTUFBTSxFQUFFO0lBQy9FLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUZELDhEQUVDO0FBQ0QsaUdBQWlHO0FBQ2pHLDRDQUEyRDtBQUFsRCxvREFBQSwyQkFBMkIsQ0FBQTtBQUNwQywyS0FBMks7QUFDM0s7SUFDSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRkQsOENBRUM7QUFDRCw4TUFBOE07QUFDOU0sc0JBQTZCLE1BQTZCLElBQUksTUFBTSxFQUFFO0lBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFGRCxvQ0FFQztBQUNELHlIQUF5SDtBQUN6SCx1QkFBOEIsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUZELHNDQUVDO0FBQ0QsNENBQTRDO0FBQzVDLDRDQUE4QztBQUFyQyx1Q0FBQSxjQUFjLENBQUE7QUFDdkIsNkNBQTZDO0FBQzdDLDRDQUErQztBQUF0Qyx3Q0FBQSxlQUFlLENBQUE7QUFDeEIsK0NBQStDO0FBQy9DLDRDQUFpRDtBQUF4QywwQ0FBQSxpQkFBaUIsQ0FBQTtBQUMxQiwrQ0FBK0M7QUFDL0MsNENBQWlEO0FBQXhDLDBDQUFBLGlCQUFpQixDQUFBO0FBQzFCLG1MQUFtTDtBQUNuTCw0Q0FBa0Q7QUFBekMsMkNBQUEsa0JBQWtCLENBQUE7QUFFM0IsNk5BQTZOO0FBQzdOLDBCQUFpQyxHQUFvQyxFQUFFLE9BQXVCLENBQUMsRUFBRSxRQUF5QyxNQUFNLENBQUMsSUFBSTtJQUNqSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRkQsNENBRUM7QUFDRCwrTEFBK0w7QUFDL0wsMkJBQWtDLEdBQW9DLEVBQUUsT0FBdUIsQ0FBQztJQUM1RixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCw4Q0FFQztBQUNELHNWQUFzVjtBQUN0VixzQ0FBNkMsUUFBeUMsRUFBRSxRQUF5QyxFQUFFLGtCQUFzRCxJQUFJLEVBQUUsdUJBQTRCLElBQUk7SUFDM04sRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNsQiwwQkFBMEIsSUFBMEM7WUFDaEUsTUFBTSxLQUFLLEdBQW9DLElBQUksK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekYsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7QUFDTCxDQUFDO0FBWEQsb0VBV0M7QUFDRCxnU0FBZ1M7QUFDaFMsa0NBQXlDLElBQXFDO0lBQzFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRkQsNERBRUM7QUFDRCxzSkFBc0o7QUFDdEosZ0NBQXVDLFNBQWtCLEVBQUUsT0FBdUIsQ0FBQztJQUMvRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFGRCx3REFFQztBQUNELGlLQUFpSztBQUNqSyw0Q0FBa0Q7QUFBekMsMkNBQUEsa0JBQWtCLENBQUE7QUFDM0IseVBBQXlQO0FBQ3pQLHlTQUF5UztBQUN6Uyw4TEFBOEw7QUFDOUwscU1BQXFNO0FBQ3JNLG9JQUFvSTtBQUNwSSxvTEFBb0w7QUFDcEwsMElBQTBJO0FBQzFJLGdMQUFnTDtBQUNoTCxzQkFBNkIsV0FBcUQsRUFBRSxjQUFnRSxDQUFDLEVBQUUsT0FBdUIsQ0FBQztJQUMzSyxFQUFFLENBQUMsQ0FBQyxPQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFdBQThDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDO0lBQ1gsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsV0FBNkIsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7QUFDTCxDQUFDO0FBUEQsb0NBT0M7QUFDRCx1QkFBOEIsWUFBc0QsRUFBRSxlQUFpRSxDQUFDLEVBQUUsT0FBdUIsQ0FBQztJQUM5SyxFQUFFLENBQUMsQ0FBQyxPQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFlBQStDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsWUFBOEIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7QUFDTCxDQUFDO0FBTkQsc0NBTUM7QUFDRCw0QkFBbUMsaUJBQW1DLEVBQUUsb0JBQThDLENBQUMsRUFBRSxPQUF1QixDQUFDO0lBQzdJLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixFQUFFLGlCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBbUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7QUFDTCxDQUFDO0FBTkQsZ0RBTUM7QUFDRCx3QkFBK0IsSUFBYTtJQUN4QyxFQUFFLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7QUFDTCxDQUFDO0FBTkQsd0NBTUM7QUFFRCwySUFBMkk7QUFDM0ksNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQiwySUFBMkk7QUFDM0ksNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQiw4SkFBOEo7QUFDOUosNENBQTZDO0FBQXBDLHNDQUFBLGFBQWEsQ0FBQTtBQUN0Qiw4SkFBOEo7QUFDOUosNENBQTZDO0FBQXBDLHNDQUFBLGFBQWEsQ0FBQTtBQUN0QiwySUFBMkk7QUFDM0ksNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQiwySUFBMkk7QUFDM0ksNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQix3VEFBd1Q7QUFDeFQsdUJBQThCLGlCQUF5QixHQUFHO0lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUZELHNDQUVDO0FBQ0QsZ09BQWdPO0FBQ2hPLDJCQUFrQyxLQUFhLEVBQUUsaUJBQXlCLEdBQUc7SUFDekUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsOENBRUM7QUFDRCxtTkFBbU47QUFDbk4sNkNBQTZDO0FBRTdDLDZCQUE2QjtBQUM3Qiw2SUFBNkk7QUFDN0ksa0JBQXlCLElBQVksSUFBUyxDQUFDO0FBQS9DLDRCQUErQztBQUMvQyxxQ0FBcUM7QUFDckMscUJBQWlDLENBQUM7QUFBbEMsMEJBQWtDO0FBQ2xDLG1FQUFtRTtBQUNuRSwyRUFBMkU7QUFDM0Usd0JBQStCLEdBQWtCLEVBQUUsR0FBcUU7SUFDcEgsRUFBRSxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQXFELENBQUMsQ0FBQztJQUNwRixDQUFDO0FBQ0wsQ0FBQztBQU5ELHdDQU1DO0FBQ0Qsd0RBQXdEO0FBQ3hELHVCQUE4QixRQUFnQixDQUFDO0lBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUZELHNDQUVDO0FBQ0Qsc0VBQXNFO0FBQ3RFLDhFQUE4RTtBQUM5RSxzQkFBNkIsR0FBdUIsRUFBRSxHQUE2QztJQUMvRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRkQsb0NBRUM7QUFDRCxzREFBc0Q7QUFDdEQscUJBQTRCLFFBQWdCLENBQUM7SUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRkQsa0NBRUM7QUFDRCxnUUFBZ1E7QUFDaFEsMkJBQWtDLEdBQWtCO0lBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUZELDhDQUVDO0FBQ0Qsa0hBQWtIO0FBQ2xIO0lBQ0ksTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCwwQkFFQztBQUNELHVMQUF1TDtBQUN2TCw0Q0FBMkM7QUFBbEMsb0NBQUEsV0FBVyxDQUFBO0FBQ3BCLDBMQUEwTDtBQUMxTCxnQ0FBdUMsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRkQsd0RBRUM7QUFDRCx5TEFBeUw7QUFDekwsK0lBQStJO0FBQy9JLCtJQUErSTtBQUMvSSxxQkFBNEIsR0FBa0IsRUFBRSxZQUFvQixHQUFHO0lBQ25FLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRkQsa0NBRUM7QUFFRCxxQ0FBcUM7QUFDckMsc1RBQXNUO0FBQ3RULDRDQUE2QztBQUFwQyxzQ0FBQSxhQUFhLENBQUE7QUFDdEIsMENBQTBDO0FBQzFDLDRDQUE0QztBQUFuQyxxQ0FBQSxZQUFZLENBQUE7QUFDckIsaUtBQWlLO0FBQ2pLLDRDQUE2QztBQUFwQyxzQ0FBQSxhQUFhLENBQUE7QUFDdEIsK1BBQStQO0FBQy9QLHlCQUFnQyxhQUFxQixHQUFHO0lBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUZELDBDQUVDO0FBQ0QsNENBQTRDO0FBQzVDLDRDQUE4QztBQUFyQyx1Q0FBQSxjQUFjLENBQUE7QUFDdkIsbU1BQW1NO0FBQ25NLDRDQUFzRDtBQUE3QywrQ0FBQSxzQkFBc0IsQ0FBQTtBQUMvQixtREFBbUQ7QUFDbkQsNENBQXFEO0FBQTVDLDhDQUFBLHFCQUFxQixDQUFBO0FBQzlCLG1WQUFtVjtBQUNuViw0Q0FBZ0Q7QUFBdkMseUNBQUEsZ0JBQWdCLENBQUE7QUFDekIsNkNBQTZDO0FBQzdDLDRDQUErQztBQUF0Qyx3Q0FBQSxlQUFlLENBQUE7QUFFeEIsa0JBQWtCO0FBQ2xCLHFOQUFxTjtBQUNyTiw0Q0FBeUM7QUFBaEMsa0NBQUEsU0FBUyxDQUFBO0FBQ2xCLDRKQUE0SjtBQUM1SixrQkFBeUIsUUFBZ0IsR0FBRyxFQUFFLFlBQW9CLENBQUMsR0FBRztJQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsNEJBRUM7QUFDRCxtSEFBbUg7QUFDbkgsNENBQXVDO0FBQTlCLGdDQUFBLE9BQU8sQ0FBQTtBQUNoQixzSEFBc0g7QUFDdEgsNENBQXVDO0FBQTlCLGdDQUFBLE9BQU8sQ0FBQTtBQUNoQixnSUFBZ0k7QUFDaEksZUFBc0IsSUFBcUMsSUFBVSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUF4RixzQkFBd0Y7QUFDeEYsb0xBQW9MO0FBQ3BMLGdCQUF1QixXQUFtQixHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBekUsd0JBQXlFO0FBQ3pFLG9MQUFvTDtBQUNwTCxrQkFBeUIsV0FBbUIsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQTdFLDRCQUE2RTtBQUM3RSw4UUFBOFE7QUFDOVEsNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQixzQ0FBc0M7QUFDdEMsNENBQXdDO0FBQS9CLGlDQUFBLFFBQVEsQ0FBQTtBQUNqQixnSkFBZ0o7QUFDaEosc0JBQTZCLE1BQTZCLElBQUksTUFBTSxFQUFFLElBQWdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUF0SCxvQ0FBc0g7QUFDdEgsbUdBQW1HO0FBQ25HLDRDQUE2QztBQUFwQyxzQ0FBQSxhQUFhLENBQUE7QUFDdEIsbUdBQW1HO0FBQ25HLDRDQUE2QztBQUFwQyxzQ0FBQSxhQUFhLENBQUE7QUFDdEIsbUdBQW1HO0FBQ25HLHNCQUE2QixTQUEwQyxJQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQWhILG9DQUFnSDtBQUNoSCxtR0FBbUc7QUFDbkcsNENBQTZDO0FBQXBDLHNDQUFBLGFBQWEsQ0FBQTtBQUN0QixtR0FBbUc7QUFDbkcsNENBQTZDO0FBQXBDLHNDQUFBLGFBQWEsQ0FBQTtBQUN0Qix5SEFBeUg7QUFDekgsMkJBQWtDLE1BQTZCLElBQUksTUFBTSxFQUFFLElBQWdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQWhJLDhDQUFnSTtBQUNoSSx5TUFBeU07QUFDek0sNEJBQW1DLE1BQTZCLElBQUksTUFBTSxFQUFFLElBQWdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQWxJLGdEQUFrSTtBQUNsSSxvS0FBb0s7QUFDcEssNEJBQW1DLEdBQW9DLElBQVUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFoSCxnREFBZ0g7QUFDaEgsNFBBQTRQO0FBQzVQLDRDQUF1RDtBQUE5QyxnREFBQSx1QkFBdUIsQ0FBQTtBQUNoQyw0R0FBNEc7QUFDNUcsNENBQWlEO0FBQXhDLDBDQUFBLGlCQUFpQixDQUFBO0FBQzFCLDJMQUEyTDtBQUMzTCw0Q0FBNEQ7QUFBbkQscURBQUEsNEJBQTRCLENBQUE7QUFDckMsdUlBQXVJO0FBQ3ZJLDRDQUE4QztBQUFyQyx1Q0FBQSxjQUFjLENBQUE7QUFDdkIsZ09BQWdPO0FBQ2hPLDRDQUF5RDtBQUFoRCxrREFBQSx5QkFBeUIsQ0FBQTtBQUVsQyxVQUFVO0FBQ1YseUhBQXlIO0FBQ3pILDZGQUE2RjtBQUM3RixpQkFBd0IsUUFBZ0IsQ0FBQyxFQUFFLEtBQW9CLElBQUksRUFBRSxTQUFrQixJQUFJO0lBQ3ZGLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFIRCwwQkFHQztBQUNELGlMQUFpTDtBQUNqTCw0Q0FBMEM7QUFBakMsbUNBQUEsVUFBVSxDQUFBO0FBQ25CLDBIQUEwSDtBQUMxSCw0Q0FBOEM7QUFBckMsdUNBQUEsY0FBYyxDQUFBO0FBQ3ZCLDZKQUE2SjtBQUM3Six3QkFBK0IsZUFBdUIsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFGRCx3Q0FFQztBQUNELDZKQUE2SjtBQUM3Siw0Q0FBOEM7QUFBckMsdUNBQUEsY0FBYyxDQUFBO0FBQ3ZCLHlSQUF5UjtBQUN6Uix5QkFBZ0MsZUFBdUIsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCwwQ0FFQztBQUNELG1OQUFtTjtBQUNuTiw0Q0FBK0M7QUFBdEMsd0NBQUEsZUFBZSxDQUFBO0FBQ3hCLDZDQUE2QztBQUM3Qyw0Q0FBK0M7QUFBdEMsd0NBQUEsZUFBZSxDQUFBO0FBRXhCLFlBQVk7QUFDWiw0SkFBNEo7QUFDNUoseUtBQXlLO0FBQ3pLLHNLQUFzSztBQUN0SyxvRkFBb0Y7QUFDcEYsc0RBQXNEO0FBQ3RELDhDQUE4QztBQUM5Qyw0Q0FBc0M7QUFBN0IsK0JBQUEsTUFBTSxDQUFBO0FBQ2YsbUNBQW1DO0FBQ25DLDRDQUFxQztBQUE1Qiw4QkFBQSxLQUFLLENBQUE7QUFDZCxzTkFBc047QUFDdE4sbUZBQW1GO0FBQ25GLHFEQUFxRDtBQUNyRCw0Q0FBcUM7QUFBNUIsOEJBQUEsS0FBSyxDQUFBO0FBRWQsZ0JBQWdCO0FBQ2hCLDhWQUE4VjtBQUM5Vix5QkFBZ0MsSUFBWSxJQUFVLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQW5GLDBDQUFtRjtBQUNuRixpSUFBaUk7QUFDakksd0dBQXdHO0FBQ3hHLGNBQXFCLEdBQVcsQ0FBQSxvQkFBb0IsSUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBNUYsb0JBQTRGO0FBQzVGLDZMQUE2TDtBQUM3TCx3R0FBd0c7QUFDeEcscUJBQTRCLEdBQXdELEVBQUUsR0FBVyxDQUFBLG9CQUFvQjtJQUNqSCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFzQyxFQUFFLEdBQUcsQ0FBQSxhQUFhLENBQUMsQ0FBQztBQUN0SCxDQUFDO0FBRkQsa0NBRUM7QUFDRCw2TkFBNk47QUFDN04sd0dBQXdHO0FBQ3hHLHNCQUE2QixHQUFXLENBQUEsb0JBQW9CLElBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUEsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQTVHLG9DQUE0RztBQUM1RyxxVkFBcVY7QUFDclYsd0dBQXdHO0FBQ3hHLHFCQUE0QixHQUFXLENBQUEsb0JBQW9CLElBQVUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUEsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQTFHLGtDQUEwRztBQUMxRywwS0FBMEs7QUFDMUssd0dBQXdHO0FBQ3hHLG1CQUEwQixLQUFhLEVBQUUsR0FBVyxDQUFBLG9CQUFvQixJQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBNUgsOEJBQTRIO0FBQzVILHdJQUF3STtBQUN4SSx3R0FBd0c7QUFDeEcsb0JBQTJCLEdBQVcsQ0FBQSxvQkFBb0IsSUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBeEcsZ0NBQXdHO0FBQ3hHLGtRQUFrUTtBQUNsUSw0Q0FBc0M7QUFBN0IsK0JBQUEsTUFBTSxDQUFBO0FBRWYsZ0JBQWdCO0FBQ2hCLDRHQUE0RztBQUM1RyxnQkFBdUIsS0FBYSxFQUFFLE9BQXdDLE1BQU0sQ0FBQyxJQUFJO0lBQ3JGLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsd0JBRUM7QUFDRCxnS0FBZ0s7QUFDaEssNENBQTJDO0FBQWxDLG9DQUFBLFdBQVcsQ0FBQTtBQUNwQiwrT0FBK087QUFDL08seUJBQWdDLE1BQWMsRUFBRSxJQUFxQztJQUNqRixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUZELDBDQUVDO0FBQ0QsME9BQTBPO0FBQzFPLGVBQXNCLGVBQW9CLEVBQUUsSUFBcUMsRUFBRSxNQUF1QyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQXVDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBNEMsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUE4QyxNQUFNLENBQUMsSUFBSTtJQUMxUyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUZELHNCQUVDO0FBQ0Qsa1ZBQWtWO0FBQ2xWLHFCQUE0QixlQUFvQixFQUFFLElBQXFDLEVBQUUsTUFBdUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUF1QyxNQUFNLENBQUMsSUFBSSxFQUFFLGdCQUF3QixDQUFDLENBQUMsRUFBRSxTQUEwQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQTRDLE1BQU0sQ0FBQyxLQUFLO0lBQ3hVLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFGRCxrQ0FFQztBQUNELGdFQUFnRTtBQUNoRSxrQkFBeUIsS0FBYSxFQUFFLENBQWtEO0lBQ3RGLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLEtBQUssR0FBMkIsQ0FBRSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVRELDRCQVNDO0FBQ0QsMkdBQTJHO0FBQzNHLHVCQUE4QixLQUFhLEVBQUUsS0FBNEIsRUFBRSxXQUFtQjtJQUMxRixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFGRCxzQ0FFQztBQUNELHVFQUF1RTtBQUN2RSxnRkFBZ0Y7QUFDaEYscUJBQTRCLEtBQWEsRUFBRSxXQUFvRSxFQUFFLFFBQWlCO0lBQzlILEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLEtBQUssR0FBMEIsQ0FBRSxXQUFXLEVBQUUsQ0FBRSxDQUFDO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDTCxDQUFDO0FBVEQsa0NBU0M7QUFDRCwwUUFBMFE7QUFDMVEseUJBQWdDLEtBQWEsRUFBRSxNQUF5QixFQUFFLGVBQXVCLENBQUMsRUFBRSxlQUF1QixDQUFDLEVBQUUsZUFBOEIsSUFBSSxFQUFFLFlBQTJCLElBQUksRUFBRSxZQUEyQixJQUFJLEVBQUUsYUFBOEMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFpQixDQUFDO0lBQzdTLHVCQUF1QixJQUFTLEVBQUUsR0FBVztRQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9ILENBQUM7QUFMRCwwQ0FLQztBQUNELGtSQUFrUjtBQUNsUiw0QkFBbUMsS0FBYSxFQUFFLGFBQWlELEVBQUUsSUFBUyxFQUFFLGVBQXVCLENBQUMsRUFBRSxlQUF1QixDQUFDLEVBQUUsZUFBOEIsSUFBSSxFQUFFLFlBQTJCLElBQUksRUFBRSxZQUEyQixJQUFJLEVBQUUsYUFBOEMsTUFBTSxDQUFDLElBQUk7SUFDL1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzNILENBQUM7QUFGRCxnREFFQztBQUNELG1CQUEwQixLQUFhLEVBQUUsYUFBaUQsRUFBRSxJQUFTLEVBQUUsZUFBdUIsQ0FBQyxFQUFFLGVBQXVCLENBQUMsRUFBRSxlQUE4QixJQUFJLEVBQUUsWUFBMkIsSUFBSSxFQUFFLFlBQTJCLElBQUksRUFBRSxhQUE4QyxNQUFNLENBQUMsSUFBSTtJQUN0VCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9ILENBQUM7QUFGRCw4QkFFQztBQUNELDhRQUE4UTtBQUM5USw2QkFBb0MsS0FBYSxFQUFFLE1BQXlCLEVBQUUsZUFBdUIsQ0FBQyxFQUFFLGVBQXVCLENBQUMsRUFBRSxlQUE4QixJQUFJLEVBQUUsWUFBMkIsSUFBSSxFQUFFLFlBQTJCLElBQUksRUFBRSxhQUE4QyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQWlCLENBQUM7SUFDalQsdUJBQXVCLElBQVMsRUFBRSxHQUFXO1FBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFILENBQUM7QUFMRCxrREFLQztBQUNELHNSQUFzUjtBQUN0UixnQ0FBdUMsS0FBYSxFQUFFLGFBQWlELEVBQUUsSUFBUyxFQUFFLGVBQXVCLENBQUMsRUFBRSxlQUF1QixDQUFDLEVBQUUsZUFBOEIsSUFBSSxFQUFFLFlBQTJCLElBQUksRUFBRSxZQUEyQixJQUFJLEVBQUUsYUFBOEMsTUFBTSxDQUFDLElBQUk7SUFDblUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9ILENBQUM7QUFGRCx3REFFQztBQUNELHVCQUE4QixLQUFhLEVBQUUsYUFBaUQsRUFBRSxJQUFTLEVBQUUsZUFBdUIsQ0FBQyxFQUFFLGVBQXVCLENBQUMsRUFBRSxlQUE4QixJQUFJLEVBQUUsWUFBMkIsSUFBSSxFQUFFLFlBQTJCLElBQUksRUFBRSxhQUE4QyxNQUFNLENBQUMsSUFBSTtJQUMxVCxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25JLENBQUM7QUFGRCxzQ0FFQztBQUNELDBIQUEwSDtBQUMxSCxxQkFBNEIsUUFBZ0IsRUFBRSxXQUE0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxVQUF5QixJQUFJO0lBQ3JJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsa0NBRUM7QUFFRCxxQkFBcUI7QUFDckIsbUhBQW1IO0FBQ25ILGlIQUFpSDtBQUNqSCwrR0FBK0c7QUFDL0csb0JBQTJCLEtBQWEsRUFBRSxhQUE0QixFQUFFLFFBQThCLENBQUM7SUFDbkcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRkQsZ0NBRUM7QUFDRCxzQ0FBc0M7QUFDdEMsc0JBQW1DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFBckQsNEJBQXFEO0FBQ3JELHVKQUF1SjtBQUN2SixtUEFBbVA7QUFDblAseU1BQXlNO0FBQ3pNLHlDQUF5QyxXQUFtQjtJQUN4RCw2QkFBNkI7SUFDN0IsK0JBQStCO0lBQy9CLE1BQU0sS0FBSyxHQUFlLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDNUIscUhBQXFIO0lBQ3JILE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ3ZILENBQUM7QUFDRCxlQUFzQixLQUFhLEVBQUUsWUFBMkQsRUFBRSxLQUF3QixFQUFFLGNBQXNCLEtBQUssQ0FBQyxNQUFNLEVBQUUsNEJBQW9DLENBQUMsQ0FBQztJQUNsTSx5RkFBeUY7SUFFekYsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFFLFlBQVksRUFBRSxDQUFFLENBQUM7SUFFdEYsRUFBRSxDQUFDLENBQUMsT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQiwyQ0FBMkM7SUFDL0MsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxJQUFJLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDOUIseURBQXlEO0lBQ3pELHdEQUF3RDtJQUN4RCxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDeEQsWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzQyx5SUFBeUk7SUFDekkseUVBQXlFO0lBQ3pFLElBQUk7SUFDSiwyRkFBMkY7SUFDM0Ysb0ZBQW9GO0lBQ3BGLElBQUk7SUFDSixFQUFFLENBQUMsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUMxRSxDQUFDO1FBQ0csTUFBTSxnQkFBZ0IsR0FBVywrQkFBK0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzVGLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFFakIsZ0JBQWdCO0lBQ2hCLHdJQUF3STtJQUN4SSxJQUFJLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQ3BDLENBQUM7UUFDRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sYUFBYSxHQUFZLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELHlCQUF5QjtRQUN6QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsMENBQTBDO1FBQzFDLG9DQUFvQztRQUNwQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQ3pDLENBQUM7WUFDRyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNkLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsUUFBUSxFQUFFLENBQUM7SUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUNyRSxNQUFNLENBQUMsYUFBYSxDQUFDO0FBQ3pCLENBQUM7QUF6REQsc0JBeURDO0FBQ0QsaUJBQXdCLEtBQWEsRUFBRSxZQUFtQyxFQUFFLEtBQWEsRUFBRSw0QkFBb0MsQ0FBQyxDQUFDO0lBQzdILE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUZELDBCQUVDO0FBQ0QsaUJBQXdCLEtBQWEsRUFBRSxZQUFtQyxFQUFFLFlBQWtGLEVBQUUsSUFBUyxFQUFFLFdBQW1CLEVBQUUsNEJBQW9DLENBQUMsQ0FBQztJQUNsTyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFGRCwwQkFFQztBQUNELHVHQUF1RztBQUN2RyxvQkFBb0I7QUFDcEIsSUFBSTtBQUVKLGlJQUFpSTtBQUNqSSxnVkFBZ1Y7QUFDaFYsbU9BQW1PO0FBQ25PLG1CQUEwQixLQUFhLEVBQUUsQ0FBd0gsRUFBRSxVQUFrQixHQUFHLEVBQUUsUUFBZ0IsR0FBRyxFQUFFLFFBQWdCLEdBQUcsRUFBRSxpQkFBZ0MsTUFBTSxFQUFFLFFBQWdCLEdBQUc7SUFDM1IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxLQUFLLEdBQTBCLENBQUUsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVRELDhCQVNDO0FBQ0QsNExBQTRMO0FBQzVMLG9CQUEyQixLQUFhLEVBQUUsQ0FBaUYsRUFBRSxVQUFrQixHQUFHLEVBQUUsUUFBZ0IsR0FBRyxFQUFFLFFBQWdCLEdBQUcsRUFBRSxpQkFBeUIsTUFBTSxFQUFFLFFBQWdCLEdBQUc7SUFDOU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLEdBQTBCLENBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25GLENBQUM7QUFDTCxDQUFDO0FBVkQsZ0NBVUM7QUFDRCw0TEFBNEw7QUFDNUwsb0JBQTJCLEtBQWEsRUFBRSxDQUFnRCxFQUFFLFVBQWtCLEdBQUcsRUFBRSxRQUFnQixHQUFHLEVBQUUsUUFBZ0IsR0FBRyxFQUFFLGlCQUF5QixNQUFNLEVBQUUsUUFBZ0IsR0FBRztJQUM3TSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRkQsZ0NBRUM7QUFDRCw0TEFBNEw7QUFDNUwsb0JBQTJCLEtBQWEsRUFBRSxDQUFpQyxFQUFFLFVBQWtCLEdBQUcsRUFBRSxRQUFnQixHQUFHLEVBQUUsUUFBZ0IsR0FBRyxFQUFFLGlCQUF5QixNQUFNLEVBQUUsUUFBZ0IsR0FBRztJQUM5TCxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBMEIsQ0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRixDQUFDO0FBQ0wsQ0FBQztBQVpELGdDQVlDO0FBQ0Qsd1FBQXdRO0FBQ3hRLHlCQUFnQyxLQUFhLEVBQUUsYUFBb0ksRUFBRSxhQUFvSSxFQUFFLFVBQWtCLEdBQUcsRUFBRSxRQUFnQixHQUFHLEVBQUUsUUFBZ0IsR0FBRyxFQUFFLGlCQUF5QixNQUFNLEVBQUUscUJBQW9DLElBQUksRUFBRSxRQUFnQixHQUFHO0lBQ3RkLE1BQU0saUJBQWlCLEdBQTBCLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUUsYUFBYSxFQUFFLENBQUUsQ0FBQztJQUMzSCxNQUFNLGlCQUFpQixHQUEwQixLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFFLGFBQWEsRUFBRSxDQUFFLENBQUM7SUFDM0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hKLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFDLENBQUM7SUFDM0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUMzRSxNQUFNLENBQUMsR0FBRyxDQUFDO0FBRWYsQ0FBQztBQVJELDBDQVFDO0FBQ0QsbU9BQW1PO0FBQ25PLGlCQUF3QixLQUFhLEVBQUUsQ0FBd0gsRUFBRSxVQUFrQixHQUFHLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLFFBQWdCLENBQUMsRUFBRSxpQkFBeUIsTUFBTTtJQUN6UCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sS0FBSyxHQUEwQixDQUFFLENBQUMsRUFBRSxDQUFFLENBQUM7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVRELDBCQVNDO0FBQ0QsMEpBQTBKO0FBQzFKLGtCQUF5QixLQUFhLEVBQUUsQ0FBd0UsRUFBRSxVQUFrQixHQUFHLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLFFBQWdCLENBQUMsRUFBRSxpQkFBeUIsTUFBTTtJQUMxTSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFGRCw0QkFFQztBQUNELDBKQUEwSjtBQUMxSixrQkFBeUIsS0FBYSxFQUFFLENBQWdELEVBQUUsVUFBa0IsR0FBRyxFQUFFLFFBQWdCLENBQUMsRUFBRSxRQUFnQixDQUFDLEVBQUUsaUJBQXlCLE1BQU07SUFDbEwsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRkQsNEJBRUM7QUFDRCwwSkFBMEo7QUFDMUosa0JBQXlCLEtBQWEsRUFBRSxDQUF3QixFQUFFLFVBQWtCLEdBQUcsRUFBRSxRQUFnQixDQUFDLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLGlCQUF5QixNQUFNO0lBQzFKLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUZELDRCQUVDO0FBQ0Qsb09BQW9PO0FBQ3BPLHVCQUE4QixLQUFhLEVBQUUsYUFBb0ksRUFBRSxhQUFvSSxFQUFFLFVBQWtCLEdBQUcsRUFBRSxRQUFnQixDQUFDLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLGlCQUF5QixNQUFNLEVBQUUscUJBQW9DLElBQUk7SUFDM2IsTUFBTSxpQkFBaUIsR0FBMEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBRSxhQUFhLEVBQUUsQ0FBRSxDQUFDO0lBQzNILE1BQU0saUJBQWlCLEdBQTBCLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUUsYUFBYSxFQUFFLENBQUUsQ0FBQztJQUMzSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN2SSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQzNFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFDLENBQUM7SUFDM0UsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFQRCxzQ0FPQztBQUVELCtCQUErQjtBQUMvQixrTEFBa0w7QUFDbEwsbUJBQTBCLEtBQWEsRUFBRSxHQUFtRSxFQUFFLFdBQW1CLEdBQUcsWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdDQUF3QixFQUFFLFFBQWtDLENBQUMsRUFBRSxXQUF5QyxJQUFJLEVBQUUsWUFBaUIsSUFBSTtJQUMzUyxtQkFBbUIsSUFBb0M7UUFDbkQsTUFBTSxLQUFLLEdBQThCLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsTUFBTSxHQUFHLEdBQVcsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUFBLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFlBQVksY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLE9BQU8sR0FBMEIsQ0FBRSxHQUFHLENBQUMsTUFBTSxDQUFFLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksR0FBRyxHQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JILEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLE9BQU8sR0FBMEIsQ0FBRSxHQUFHLEVBQUUsQ0FBRSxDQUFDO1FBQ2pELElBQUksR0FBRyxHQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BILEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFyQkQsOEJBcUJDO0FBQ0QsNk5BQTZOO0FBQzdOLDRCQUFtQyxLQUFhLEVBQUUsR0FBbUUsRUFBRSxXQUFtQixHQUFHLFlBQVksY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBd0IsRUFBRSxPQUF3QyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQWtDLENBQUMsRUFBRSxXQUF5QyxJQUFJLEVBQUUsWUFBaUIsSUFBSTtJQUN6VyxtQkFBbUIsSUFBb0M7UUFDbkQsTUFBTSxLQUFLLEdBQThCLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsTUFBTSxHQUFHLEdBQVcsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFlBQVksY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBMEIsQ0FBRSxHQUFHLENBQUMsTUFBTSxDQUFFLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksR0FBRyxHQUFZLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLE9BQU8sR0FBMEIsQ0FBRSxHQUFHLEVBQUUsQ0FBRSxDQUFDO1FBQ2pELElBQUksR0FBRyxHQUFZLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25JLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFyQkQsZ0RBcUJDO0FBQ0QsK0tBQStLO0FBQy9LLG9CQUEyQixLQUFhLEVBQUUsQ0FBd0gsRUFBRSxPQUFlLEdBQUcsRUFBRSxZQUFvQixHQUFHLEVBQUUsb0JBQTRCLENBQUMsQ0FBQyxFQUFFLGNBQXdDLENBQUM7SUFDdFIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sS0FBSyxHQUEwQixDQUFFLENBQUMsRUFBRSxDQUFFLENBQUM7UUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDTCxDQUFDO0FBVEQsZ0NBU0M7QUFDRCx1SUFBdUk7QUFDdkkscUJBQTRCLEtBQWEsRUFBRSxDQUF3RSxFQUFFLG9CQUE0QixDQUFDLENBQUMsRUFBRSxjQUF3QyxDQUFDO0lBQzFMLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUZELGtDQUVDO0FBQ0QsdUlBQXVJO0FBQ3ZJLHFCQUE0QixLQUFhLEVBQUUsQ0FBZ0QsRUFBRSxvQkFBNEIsQ0FBQyxDQUFDLEVBQUUsY0FBd0MsQ0FBQztJQUNsSyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFGRCxrQ0FFQztBQUNELHVJQUF1STtBQUN2SSxxQkFBNEIsS0FBYSxFQUFFLENBQXdCLEVBQUUsb0JBQTRCLENBQUMsQ0FBQyxFQUFFLGNBQXdDLENBQUM7SUFDMUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRkQsa0NBRUM7QUFDRCx1SUFBdUk7QUFDdkksa0JBQXlCLEtBQWEsRUFBRSxDQUF3SCxFQUFFLE9BQWUsQ0FBQyxFQUFFLFlBQW9CLEdBQUcsRUFBRSxjQUF3QyxDQUFDO0lBQ2xQLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLEtBQUssR0FBMEIsQ0FBRSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVRELDRCQVNDO0FBQ0QsdUdBQXVHO0FBQ3ZHLG1CQUEwQixLQUFhLEVBQUUsQ0FBd0UsRUFBRSxjQUF3QyxDQUFDO0lBQ3hKLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUZELDhCQUVDO0FBQ0QsdUdBQXVHO0FBQ3ZHLG1CQUEwQixLQUFhLEVBQUUsQ0FBZ0QsRUFBRSxjQUF3QyxDQUFDO0lBQ2hJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUZELDhCQUVDO0FBQ0QsdUdBQXVHO0FBQ3ZHLG1CQUEwQixLQUFhLEVBQUUsQ0FBd0IsRUFBRSxjQUF3QyxDQUFDO0lBQ3hHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUZELDhCQUVDO0FBRUQsaUlBQWlJO0FBQ2pJLGlUQUFpVDtBQUNqVCxxQkFBNEIsS0FBYSxFQUFFLENBQXdILEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxpQkFBeUIsTUFBTSxFQUFFLFFBQWdCLEdBQUc7SUFDblAsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLEtBQUssR0FBMEIsQ0FBRSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFURCxrQ0FTQztBQUNELDBKQUEwSjtBQUMxSixzQkFBNkIsS0FBYSxFQUFFLENBQWdHLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxpQkFBeUIsTUFBTSxFQUFFLFFBQWdCLEdBQUc7SUFDNU4sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLEVBQUUsR0FBMEIsQ0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVZELG9DQVVDO0FBQ0QsMEpBQTBKO0FBQzFKLHNCQUE2QixLQUFhLEVBQUUsQ0FBZ0QsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLGlCQUF5QixNQUFNLEVBQUUsUUFBZ0IsR0FBRztJQUM1SyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFGRCxvQ0FFQztBQUNELDBKQUEwSjtBQUMxSixzQkFBNkIsS0FBYSxFQUFFLENBQXdCLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxpQkFBeUIsTUFBTSxFQUFFLFFBQWdCLEdBQUc7SUFDcEosTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRkQsb0NBRUM7QUFDRCxzSUFBc0k7QUFDdEkscUJBQTRCLEtBQWEsRUFBRSxLQUE0SCxFQUFFLGdCQUF3QixDQUFDLEtBQUssRUFBRSxnQkFBd0IsQ0FBQyxLQUFLO0lBQ25PLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sU0FBUyxHQUEwQixDQUFFLEtBQUssRUFBRSxDQUFFLENBQUM7UUFDckQsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDTCxDQUFDO0FBVEQsa0NBU0M7QUFDRCwySEFBMkg7QUFDM0gsbUJBQTBCLEtBQWEsRUFBRSxDQUF3SCxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsaUJBQXlCLE1BQU07SUFDNU4sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sS0FBSyxHQUEwQixDQUFFLENBQUMsRUFBRSxDQUFFLENBQUM7UUFDN0MsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDTCxDQUFDO0FBVEQsOEJBU0M7QUFDRCw4SEFBOEg7QUFDOUgsb0JBQTJCLEtBQWEsRUFBRSxDQUF3RSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsaUJBQXlCLE1BQU07SUFDN0ssTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFGRCxnQ0FFQztBQUNELDhIQUE4SDtBQUM5SCxvQkFBMkIsS0FBYSxFQUFFLENBQWdELEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxpQkFBeUIsTUFBTTtJQUNySixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUZELGdDQUVDO0FBQ0QsOEhBQThIO0FBQzlILG9CQUEyQixLQUFhLEVBQUUsQ0FBd0IsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLGlCQUF5QixNQUFNO0lBQzdILE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRkQsZ0NBRUM7QUFDRCw0S0FBNEs7QUFDNUssc0JBQTZCLEtBQWEsRUFBRSxJQUFxQyxFQUFFLENBQXdILEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxpQkFBeUIsTUFBTSxFQUFFLFFBQWdCLEdBQUc7SUFDM1IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxLQUFLLEdBQTBCLENBQUUsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVRELG9DQVNDO0FBQ0QsZ0pBQWdKO0FBQ2hKLG9CQUEyQixLQUFhLEVBQUUsSUFBcUMsRUFBRSxDQUF3SCxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsaUJBQXlCLE1BQU07SUFDcFEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLEtBQUssR0FBMEIsQ0FBRSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFURCxnQ0FTQztBQUVELHlMQUF5TDtBQUN6TCxvUkFBb1I7QUFDcFIsc0dBQXNHO0FBQ3RHLG9CQUEyQixLQUFhLEVBQUUsR0FBMEUsRUFBRSxRQUFrQyxDQUFDO0lBQ3JKLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxJQUFJLEdBQTBCLENBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQztRQUM1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQVRELGdDQVNDO0FBQ0Qsc0dBQXNHO0FBQ3RHLG9CQUEyQixLQUFhLEVBQUUsR0FBa0QsRUFBRSxRQUFrQyxDQUFDO0lBQzdILEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxJQUFJLEdBQTBCLENBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFURCxnQ0FTQztBQUNELHdHQUF3RztBQUN4RyxzQkFBNkIsS0FBYSxFQUFFLEdBQTBFLEVBQUUsUUFBa0MsQ0FBQztJQUN2SixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sSUFBSSxHQUEwQixDQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFURCxvQ0FTQztBQUNELHFJQUFxSTtBQUNySSxzQkFBNkIsS0FBYSxFQUFFLEdBQWtELEVBQUUsUUFBa0MsQ0FBQyxFQUFFLFVBQWlELElBQUk7SUFDdEwsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxJQUFJLEdBQTBCLENBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0QsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDTCxDQUFDO0FBVEQsb0NBU0M7QUFDRCwyTkFBMk47QUFDM04scUJBQTRCLE9BQWUsRUFBRSxHQUFvQyxFQUFFLFFBQWtDLENBQUMsRUFBRSxPQUF3QyxNQUFNLENBQUMsSUFBSTtJQUN2SyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRkQsa0NBRUM7QUFDRCwyVEFBMlQ7QUFDM1QsNkJBQW9DLEtBQStCO0lBQy9ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsa0RBRUM7QUFFRCxpQkFBaUI7QUFDakIsa09BQWtPO0FBQ2xPLCtOQUErTjtBQUMvTix1R0FBdUc7QUFDdkcsc0dBQXNHO0FBQ3RHLHNHQUFzRztBQUN0RyxrQkFBeUIsV0FBNEIsRUFBRSxHQUFZO0lBQy9ELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLENBQUM7QUFGRCw0QkFFQztBQUNELHVGQUF1RjtBQUN2Rix3SEFBd0g7QUFDeEgsd0hBQXdIO0FBQ3hILGtJQUFrSTtBQUNsSSxrSUFBa0k7QUFDbEksb0JBQTJCLFdBQTRCLEVBQUUsUUFBaUMsQ0FBQyxFQUFFLEdBQVk7SUFDckcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9HLENBQUM7QUFGRCxnQ0FFQztBQUNELGtPQUFrTztBQUNsTyx1R0FBdUc7QUFDdkcsNENBQXdDO0FBQS9CLGlDQUFBLFFBQVEsQ0FBQTtBQUNqQiwwSEFBMEg7QUFDMUgsNENBQXVDO0FBQTlCLGdDQUFBLE9BQU8sQ0FBQTtBQUNoQiw4SkFBOEo7QUFDOUosNENBQXFEO0FBQTVDLDhDQUFBLHFCQUFxQixDQUFBO0FBQzlCLHFQQUFxUDtBQUNyUCw0Q0FBeUQ7QUFBaEQsa0RBQUEseUJBQXlCLENBQUE7QUFDbEMsb0pBQW9KO0FBQ3BKLDZCQUFvQyxPQUFnQixFQUFFLE9BQXVCLENBQUM7SUFDMUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRkQsa0RBRUM7QUFDRCx1TkFBdU47QUFDdk4sOE1BQThNO0FBQzlNLDBCQUFpQyxLQUFhLEVBQUUsa0JBQTZGLENBQUMsRUFBRSxRQUFpQyxDQUFDO0lBQzlLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLFFBQVEsR0FBMkIsQ0FBRSxlQUFlLEVBQUUsQ0FBRSxDQUFDO1FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFELGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFYRCw0Q0FXQztBQUVELDhCQUE4QjtBQUM5Qiw2UUFBNlE7QUFDN1EsNklBQTZJO0FBQzdJLG9CQUEyQixLQUFhLEVBQUUsV0FBc0UsS0FBSyxFQUFFLFFBQW1DLENBQUMsRUFBRSxPQUF3QyxNQUFNLENBQUMsSUFBSTtJQUM1TSxFQUFFLENBQUMsQ0FBQyxPQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sWUFBWSxHQUEyQixDQUFFLFFBQVEsRUFBRSxDQUFFLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7QUFDTCxDQUFDO0FBVEQsZ0NBU0M7QUFDRCw4SUFBOEk7QUFDOUksa01BQWtNO0FBQ2xNLGlCQUF3QixLQUFhLEVBQUUsWUFBMkQsRUFBRSxLQUFlLEVBQUUsY0FBc0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxrQkFBMEIsQ0FBQyxDQUFDO0lBQ2pMLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLGdCQUFnQixHQUEwQixDQUFFLFlBQVksRUFBRSxDQUFFLENBQUM7UUFDbkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN2RixZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2YsQ0FBQztBQUNMLENBQUM7QUFURCwwQkFTQztBQUNELDhOQUE4TjtBQUM5Tiw0R0FBNEc7QUFDNUcsdUJBQThCLEtBQWEsRUFBRSxJQUFxQztJQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUZELHNDQUVDO0FBQ0Qsb0lBQW9JO0FBQ3BJO0lBQ0ksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFGRCxzQ0FFQztBQUVELG1MQUFtTDtBQUNuTCw2REFBNkQ7QUFDN0QsNERBQTREO0FBQzVELHFFQUFxRTtBQUNyRSwrRkFBK0Y7QUFDL0YsZUFBc0IsTUFBYyxFQUFFLEdBQUcsSUFBVztBQUNwRCxDQUFDO0FBREQsc0JBQ0M7QUFFRCxXQUFXO0FBQ1gsNk5BQTZOO0FBQzdOLG9GQUFvRjtBQUNwRixvQkFBMkIsR0FBVztJQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFGRCxnQ0FFQztBQUNELDZMQUE2TDtBQUM3TCw0Q0FBNEM7QUFBbkMscUNBQUEsWUFBWSxDQUFBO0FBQ3JCLHdDQUF3QztBQUN4Qyw0Q0FBMEM7QUFBakMsbUNBQUEsVUFBVSxDQUFBO0FBRW5CLFFBQVE7QUFDUiwrTEFBK0w7QUFDL0wsNENBQWdEO0FBQXZDLHlDQUFBLGdCQUFnQixDQUFBO0FBQ3pCLDRDQUE0QztBQUM1Qyw0Q0FBOEM7QUFBckMsdUNBQUEsY0FBYyxDQUFBO0FBQ3ZCLGtQQUFrUDtBQUNsUCw0Q0FBNEM7QUFBbkMscUNBQUEsWUFBWSxDQUFBO0FBQ3JCLHdDQUF3QztBQUN4Qyw0Q0FBMEM7QUFBakMsbUNBQUEsVUFBVSxDQUFBO0FBQ25CLG9LQUFvSztBQUNwSyxtQkFBMEIsS0FBYSxFQUFFLFVBQW1CLElBQUksSUFBYSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQXJILDhCQUFxSDtBQUNySCxxQ0FBcUM7QUFDckMsNENBQXVDO0FBQTlCLGdDQUFBLE9BQU8sQ0FBQTtBQUNoQixpUEFBaVA7QUFDalAsNE1BQTRNO0FBQzVNLGtCQUF5QixLQUFhLEVBQUUsV0FBMEIsSUFBSSxFQUFFLFdBQXNFLEtBQUssRUFBRSxVQUFtQixJQUFJO0lBQ3hLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUFDLENBQUM7SUFDekMsRUFBRSxDQUFDLENBQUMsT0FBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakMsUUFBUSxHQUFHLENBQUUsUUFBUSxDQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixNQUFNLFlBQVksR0FBMkIsQ0FBRSxRQUFRLEVBQUUsQ0FBRSxDQUFDO1FBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEUsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDZixDQUFDO0FBQ0wsQ0FBQztBQWJELDRCQWFDO0FBRUQsU0FBUztBQUNULHVjQUF1YztBQUN2Yyw0Q0FBeUM7QUFBaEMsa0NBQUEsU0FBUyxDQUFBO0FBQ2xCLG1OQUFtTjtBQUNuTiw4QkFBcUMsU0FBaUIsRUFBRSxFQUFFLGVBQXVCLENBQUM7SUFDOUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUZELG9EQUVDO0FBQ0QsMk5BQTJOO0FBQzNOLDRDQUEwQztBQUFqQyxtQ0FBQSxVQUFVLENBQUE7QUFDbkIsaVBBQWlQO0FBQ2pQLHlCQUFnQyxTQUFpQixFQUFFLEVBQUUsU0FBd0MsSUFBSSxFQUFFLGNBQXFDLENBQUM7SUFDckksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFFLElBQUksQ0FBRSxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUhELDBDQUdDO0FBQ0QsbVlBQW1ZO0FBQ25ZLCtCQUFzQyxTQUFpQixFQUFFLEVBQUUsZUFBdUIsQ0FBQztJQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRkQsc0RBRUM7QUFDRCxvTUFBb007QUFDcE0saUNBQXdDLFNBQWlCLEVBQUUsRUFBRSxlQUF1QixDQUFDLEVBQUUsa0JBQTJCLElBQUk7SUFDbEgsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFGRCwwREFFQztBQUNELDZOQUE2TjtBQUM3TiwrQkFBc0MsU0FBaUIsRUFBRSxFQUFFLGVBQXVCLENBQUM7SUFDL0UsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUZELHNEQUVDO0FBQ0Qsc0NBQXNDO0FBQ3RDLDRDQUF3QztBQUEvQixpQ0FBQSxRQUFRLENBQUE7QUFDakIsa0lBQWtJO0FBQ2xJLDRDQUEyQztBQUFsQyxvQ0FBQSxXQUFXLENBQUE7QUFDcEIsb05BQW9OO0FBQ3BOLDRDQUFpRDtBQUF4QywwQ0FBQSxpQkFBaUIsQ0FBQTtBQUUxQixxSkFBcUo7QUFDckosc0hBQXNIO0FBQ3RILGtCQUF5QixZQUFvQixDQUFDLENBQUM7SUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRkQsNEJBRUM7QUFDRCx1SEFBdUg7QUFDdkgsbUJBQTBCLFlBQW9CLENBQUMsQ0FBQyxFQUFFLFdBQTBCLElBQUk7SUFDNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUZELDhCQUVDO0FBQ0QsK0hBQStIO0FBQy9ILHdCQUErQixZQUFvQixDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRkQsd0NBRUM7QUFDRCxpSUFBaUk7QUFDakksNENBQXlDO0FBQWhDLGtDQUFBLFNBQVMsQ0FBQTtBQUNsQiw2SkFBNko7QUFDN0osNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQiwwSkFBMEo7QUFDMUosaUJBQXdCLEdBQVc7SUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBRkQsMEJBRUM7QUFFRCxnQkFBZ0I7QUFDaEIsZ0RBQWdEO0FBQ2hELHdPQUF3TztBQUN4Tyw2QkFBb0MsUUFBaUMsQ0FBQyxFQUFFLGVBQXVCLENBQUM7SUFDNUYsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRkQsa0RBRUM7QUFDRCxvUkFBb1I7QUFDcFIsNEJBQW1DLElBQVksRUFBRSxJQUFTLEVBQUUsSUFBWSxFQUFFLE9BQXVCLENBQUM7SUFDOUYsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRkQsZ0RBRUM7QUFDRCwrQ0FBK0M7QUFDL0M7QUFDQSxDQUFDO0FBREQsOENBQ0M7QUFDRCw4UEFBOFA7QUFDOVA7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFGRCxrREFFQztBQUNELDJRQUEyUTtBQUMzUSwrQkFBc0MsSUFBWSxFQUFFLFFBQWlDLENBQUM7SUFDbEYsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRkQsc0RBRUM7QUFDRCwrQ0FBK0M7QUFDL0M7QUFDQSxDQUFDO0FBREQsOENBQ0M7QUFFRCxXQUFXO0FBQ1gseUlBQXlJO0FBQ3pJLHNCQUE2QixhQUE4QyxFQUFFLGFBQThDLEVBQUUsZ0NBQXlDO0lBQ2xLLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFGRCxvQ0FFQztBQUNELHlDQUF5QztBQUN6QztJQUNJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRkQsa0NBRUM7QUFFRCxTQUFTO0FBQ1Qsc0VBQXNFO0FBQ3RFLDRCQUFtQyxNQUF5QixJQUFJO0lBQzVELEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQztBQWJELGdEQWFDO0FBQ0QsbUVBQW1FO0FBQ25FLHlCQUFnQyxNQUF5QixJQUFJO0lBQ3pELEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQztBQWJELDBDQWFDO0FBQ0Qsb0VBQW9FO0FBQ3BFLDBCQUFpQyxNQUF5QixJQUFJO0lBQzFELEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsWUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNmLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQztBQWJELDRDQWFDO0FBRUQsUUFBUTtBQUNSLDZIQUE2SDtBQUM3SCxxTEFBcUw7QUFDckwsMk5BQTJOO0FBQzNOLDRDQUFtRDtBQUExQyw0Q0FBQSxtQkFBbUIsQ0FBQTtBQUM1QixxUEFBcVA7QUFDclAsOEJBQXFDLFNBQWlCLENBQUM7SUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCxvREFFQztBQUVELFlBQVk7QUFDWixtTkFBbU47QUFDbk4sdUJBQThCLFFBQWdDLENBQUM7SUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUZELHNDQUVDO0FBQ0QsZ09BQWdPO0FBQ2hPLDRDQUE0QztBQUFuQyxxQ0FBQSxZQUFZLENBQUE7QUFDckIsOEpBQThKO0FBQzlKLHVCQUE4QixlQUF1QixDQUFDO0lBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFGRCxzQ0FFQztBQUNELDZLQUE2SztBQUM3Syw0Q0FBNkM7QUFBcEMsc0NBQUEsYUFBYSxDQUFBO0FBQ3RCLDhDQUE4QztBQUM5Qyw0Q0FBZ0Q7QUFBdkMseUNBQUEsZ0JBQWdCLENBQUE7QUFDekIsNkNBQTZDO0FBQzdDLDRDQUErQztBQUF0Qyx3Q0FBQSxlQUFlLENBQUE7QUFDeEIsc0pBQXNKO0FBQ3RKLHdCQUErQixNQUE2QixJQUFJLE1BQU0sRUFBRTtJQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsd0NBRUM7QUFDRCxtR0FBbUc7QUFDbkcsd0JBQStCLE1BQTZCLElBQUksTUFBTSxFQUFFO0lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFGRCx3Q0FFQztBQUNELHdJQUF3STtBQUN4SSx5QkFBZ0MsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUZELDBDQUVDO0FBQ0QseU9BQXlPO0FBQ3pPLDRDQUFtRDtBQUExQyw0Q0FBQSxtQkFBbUIsQ0FBQTtBQUM1QiwwTEFBMEw7QUFDMUwseUJBQWdDLFFBQWdDLENBQUM7SUFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUZELDBDQUVDO0FBQ0QsaU1BQWlNO0FBQ2pNLHlCQUFnQyxRQUFnQyxDQUFDO0lBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFGRCwwQ0FFQztBQUNELGdEQUFnRDtBQUNoRCw0Q0FBa0Q7QUFBekMsMkNBQUEsa0JBQWtCLENBQUE7QUFDM0Isc0lBQXNJO0FBQ3RJLDRDQUFrRDtBQUF6QywyQ0FBQSxrQkFBa0IsQ0FBQTtBQUMzQiw0TEFBNEw7QUFDNUwsME1BQTBNO0FBQzFNLHVCQUE4QixnQkFBaUQsRUFBRSxRQUEwQztJQUN2SCxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsc0NBRUM7QUFDRCxxQ0FBcUM7QUFDckMsNENBQXVDO0FBQTlCLGdDQUFBLE9BQU8sQ0FBQTtBQUNoQiwyQ0FBMkM7QUFDM0MsNENBQTZDO0FBQXBDLHNDQUFBLGFBQWEsQ0FBQTtBQUN0QiwyTEFBMkw7QUFDM0w7SUFDSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRkQsZ0RBRUM7QUFDRCwyREFBMkQ7QUFDM0Q7SUFDSSxNQUFNLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFGRCxzREFFQztBQUNELDJEQUEyRDtBQUMzRCw0Q0FBaUQ7QUFBeEMsMENBQUEsaUJBQWlCLENBQUE7QUFDMUIsZ09BQWdPO0FBQ2hPLGtDQUF5QyxHQUFvQyxFQUFFLFVBQW1CLEtBQUssRUFBRSxVQUFrQixDQUFDLEdBQUcsRUFBRSxNQUE2QixJQUFJLE1BQU0sRUFBRTtJQUN0SyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFGRCw0REFFQztBQUNELDJKQUEySjtBQUMzSixzQkFBNkIsSUFBWSxFQUFFLFdBQTBCLElBQUksRUFBRSw4QkFBdUMsS0FBSyxFQUFFLGFBQXFCLENBQUMsQ0FBQyxFQUFFLE1BQTZCLElBQUksTUFBTSxFQUFFO0lBQ3ZMLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFGRCxvQ0FFQztBQUNELG1SQUFtUjtBQUNuUiwwQkFBaUMsV0FBbUIsRUFBRSxZQUFvQixFQUFFLHVCQUE4QyxFQUFFLHFCQUE0QztJQUNwSyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUM1RyxDQUFDO0FBRkQsNENBRUM7QUFFRCw0TUFBNE07QUFDNU0seUJBQWdDLEVBQWdCLEVBQUUsSUFBcUMsRUFBRSxjQUFxQyxDQUFDO0lBQzNILE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUZELDBDQUVDO0FBQ0QsMkNBQTJDO0FBQzNDLDRDQUE2QztBQUFwQyxzQ0FBQSxhQUFhLENBQUE7QUFFdEIsNkRBQTZEO0FBQzdELGlDQUF3QyxHQUFlLEVBQUUsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDOUYsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELDBEQUVDO0FBQ0QscUVBQXFFO0FBQ3JFLGlDQUF3QyxHQUFvQztJQUN4RSxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFGRCwwREFFQztBQUNELHFIQUFxSDtBQUNySCw0Q0FBb0Q7QUFBM0MsNkNBQUEsb0JBQW9CLENBQUE7QUFDN0IscUhBQXFIO0FBQ3JILDRDQUFvRDtBQUEzQyw2Q0FBQSxvQkFBb0IsQ0FBQTtBQUU3QixTQUFTO0FBQ1QsZ0tBQWdLO0FBQ2hLLHFCQUE0QixTQUF3QjtJQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRkQsa0NBRUM7QUFDRCx5VEFBeVQ7QUFDelQsbUJBQTBCLGNBQXNCO0lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFGRCw4QkFFQztBQUNELG1NQUFtTTtBQUNuTSxzQkFBNkIsY0FBc0IsRUFBRSxTQUFrQixJQUFJO0lBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRkQsb0NBRUM7QUFDRCw4SUFBOEk7QUFDOUksdUJBQThCLGNBQXNCO0lBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCxzQ0FFQztBQUNELDhPQUE4TztBQUM5Tyw2QkFBb0MsY0FBc0IsRUFBRSxZQUFvQixFQUFFLElBQVk7SUFDMUYsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFGRCxrREFFQztBQUNELHNIQUFzSDtBQUN0SCxxQkFBNEIsTUFBYztJQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsa0NBRUM7QUFDRCxvSkFBb0o7QUFDcEosd0JBQStCLE1BQWMsRUFBRSxTQUFrQixLQUFLO0lBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRkQsd0NBRUM7QUFDRCxrTkFBa047QUFDbE4sOEJBQXFDLE1BQWM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRkQsb0RBRUM7QUFDRCxxSkFBcUo7QUFDckoseUJBQWdDLE1BQWM7SUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUZELDBDQUVDO0FBQ0QsNktBQTZLO0FBQzdLLHlCQUFnQyxTQUFpQixDQUFDLEVBQUUsaUJBQXlCLENBQUMsR0FBRztJQUM3RSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUZELDBDQUVDO0FBQ0QseVJBQXlSO0FBQ3pSLDZCQUFvQyxLQUFzQyxFQUFFLEtBQXNDLEVBQUUsT0FBZ0IsSUFBSTtJQUNwSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUZELGtEQUVDO0FBQ0QsaUdBQWlHO0FBQ2pHLHlCQUFnQyxZQUFvRCxJQUFJO0lBQ3BGLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFGRCwwQ0FFQztBQUNELHlMQUF5TDtBQUN6TCxxQkFBNEIsTUFBNkIsSUFBSSxNQUFNLEVBQUU7SUFDakUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUZELGtDQUVDO0FBQ0QsNkxBQTZMO0FBQzdMLDBDQUFpRCxNQUE2QixJQUFJLE1BQU0sRUFBRTtJQUN0RixNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFGRCw0RUFFQztBQUNELDBMQUEwTDtBQUMxTCwyQkFBa0MsU0FBaUIsQ0FBQyxFQUFFLGlCQUF5QixDQUFDLEdBQUcsRUFBRSxNQUE2QixJQUFJLE1BQU0sRUFBRTtJQUMxSCxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUZELDhDQUVDO0FBQ0QsaUdBQWlHO0FBQ2pHLDZCQUFvQyxTQUFpQixDQUFDO0lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRkQsa0RBRUM7QUFDRCwyU0FBMlM7QUFDM1MsNENBQThDO0FBQXJDLHVDQUFBLGNBQWMsQ0FBQTtBQUN2Qix5SEFBeUg7QUFDekgsNENBQThDO0FBQXJDLHVDQUFBLGNBQWMsQ0FBQTtBQUN2QixtUkFBbVI7QUFDblIsZ0NBQXVDLFVBQW1CLElBQUk7SUFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRkQsd0RBRUM7QUFDRCxpTkFBaU47QUFDak4sNkJBQW9DLFVBQW1CLElBQUk7SUFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCxrREFFQztBQUVELG1FQUFtRTtBQUNuRSwrQ0FBK0M7QUFDL0MsNENBQXdDO0FBQS9CLGlDQUFBLFFBQVEsQ0FBQTtBQUNqQiw4Q0FBOEM7QUFDOUMsNENBQXVDO0FBQTlCLGdDQUFBLE9BQU8sQ0FBQTtBQUNoQiw4Q0FBOEM7QUFDOUMsNENBQWdEO0FBQXZDLHlDQUFBLGdCQUFnQixDQUFBO0FBQ3pCLDhEQUE4RDtBQUM5RCw0Q0FBZ0Q7QUFBdkMseUNBQUEsZ0JBQWdCLENBQUE7QUFFekIscUtBQXFLO0FBQ3JLLHVLQUF1SztBQUN2Syx3Q0FBd0M7QUFDeEMsNENBQTBDO0FBQWpDLG1DQUFBLFVBQVUsQ0FBQTtBQUNuQiwyR0FBMkc7QUFDM0cseUpBQXlKO0FBQ3pKLHFEQUFxRDtBQUNyRCxJQUFJO0FBQ0o7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFGRCxzQ0FFQztBQUNELDZEQUE2RDtBQUM3RCxpREFBaUQ7QUFDakQsd0JBQStCLE1BQWdDLElBQUk7SUFDL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUZELHdDQUVDO0FBQ0QsK0NBQStDO0FBQy9DLDRDQUFpRDtBQUF4QywwQ0FBQSxpQkFBaUIsQ0FBQTtBQUMxQixnRUFBZ0U7QUFDaEUsNENBQWlEO0FBQXhDLDBDQUFBLGlCQUFpQixDQUFBIn0= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lBQ0cseUJBQXlCO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBb0MsOENBQThDO1lBQzlHLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7WUFDN0csS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBbUIsMkJBQTJCO1lBQzNGLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzVCLGdCQUFnQixHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDekMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMvQixtQkFBbUIsR0FBRyxDQUFDLG1CQUFtQixDQUFDO1lBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXhJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzlCLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLGFBQWEsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRSxNQUFNLEVBQUUsR0FBdUIsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BELG9FQUFvRTtZQUNwRSxzRUFBc0U7WUFDdEUscUVBQXFFO1lBQ3JFLG9FQUFvRTtZQUNwRSxxRUFBcUU7WUFDckUsS0FBSyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbkUsc0VBQXNFO1lBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLHVFQUF1RTtRQUMzRSxDQUFDO1FBRUQsMkdBQTJHO1FBQzNHLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN0QixLQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxHQUFHLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLDRCQUFxQyxDQUFDO1lBQ2hJLEtBQUssQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUN6QyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELHdGQUF3RjtRQUN4RixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsdUJBQTBCLENBQUEsQ0FBQywyS0FBMks7WUFDaFAsVUFBVSxDQUFBLDJCQUFjLENBQUMsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFFRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdEIsWUFBWTtRQUNaLE1BQU0sRUFBRSxHQUFpQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3ZELEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZFLEVBQUUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRixFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwQyw4R0FBOEc7UUFFOUcsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTdCLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFFRDtRQUNJLFVBQVU7UUFDVixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDSixLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2xCLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNMLENBQUM7QUEvR0QsdUJBK0dDIn0= \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/imgui_demo.js b/imgui_demo.js new file mode 100644 index 0000000..eadc4c6 --- /dev/null +++ b/imgui_demo.js @@ -0,0 +1,2957 @@ +"use strict"; +// dear imgui, v1.53 +// (demo code) +Object.defineProperty(exports, "__esModule", { value: true }); +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +const imgui_4 = require("./imgui"); +const imgui_5 = require("./imgui"); +const imgui_6 = require("./imgui"); +const imgui_7 = require("./imgui"); +const imgui_8 = require("./imgui"); +const imgui_9 = require("./imgui"); +const imgui_10 = require("./imgui"); +const imgui_11 = require("./imgui"); +const imgui_12 = require("./imgui"); +const imgui_13 = require("./imgui"); +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE = "\n"; +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A, _B) { return ((_A) >= (_B)) ? (_A) : (_B); } +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) +class Static { + constructor(value) { + this.value = value; + } +} +const _static = {}; +function STATIC(key, value) { + return _static[key] || (_static[key] = new Static(value)); +} +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); +function ShowHelpMarker(desc) { + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} +function ShowUserGuide() { + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} +exports.ShowUserGuide = ShowUserGuide; +// Demonstrate most ImGui features (big function!) +function ShowDemoWindow(p_open = null) { + // Examples apps + /* static */ const show_app_main_menu_bar = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console = STATIC("show_app_console", false); + /* static */ const show_app_log = STATIC("show_app_log", false); + /* static */ const show_app_layout = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor = STATIC("show_app_style_editor", false); + /* static */ const show_app_metrics = STATIC("show_app_metrics", false); + /* static */ const show_app_about = STATIC("show_app_about", false); + if (show_app_main_menu_bar.value) + ShowExampleAppMainMenuBar(); + if (show_app_console.value) + ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) + ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) + ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) + ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) + ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) + ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) + ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) + ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) + ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) + ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + if (show_app_metrics.value) { + ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); + } + if (show_app_style_editor.value) { + ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ + ShowStyleEditor(); + ImGui.End(); + } + if (show_app_about.value) { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, 64 /* AlwaysAutoResize */); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + /* static */ const no_titlebar = STATIC("no_titlebar", false); + /* static */ const no_scrollbar = STATIC("no_scrollbar", false); + /* static */ const no_menu = STATIC("no_menu", false); + /* static */ const no_move = STATIC("no_move", false); + /* static */ const no_resize = STATIC("no_resize", false); + /* static */ const no_collapse = STATIC("no_collapse", false); + /* static */ const no_close = STATIC("no_close", false); + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags = 0; + if (no_titlebar.value) + window_flags |= 1 /* NoTitleBar */; + if (no_scrollbar.value) + window_flags |= 8 /* NoScrollbar */; + if (!no_menu.value) + window_flags |= 1024 /* MenuBar */; + if (no_move.value) + window_flags |= 4 /* NoMove */; + if (no_resize.value) + window_flags |= 2 /* NoResize */; + if (no_collapse.value) + window_flags |= 32 /* NoCollapse */; + if (no_close.value) + p_open = null; // Don't pass our bool* to Begin + ImGui.SetNextWindowSize(new imgui_6.ImVec2(550, 680), 4 /* FirstUseEver */); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + ImGui.Text(`dear imgui says hello. (${imgui_1.IMGUI_VERSION})`); + // Menu + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("Menu")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ ShowUserGuide(); + } + if (ImGui.CollapsingHeader("Window options")) { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + if (ImGui.TreeNode("Style")) { + /*ImGui.*/ ShowStyleEditor(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Capture/Logging")) { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Widgets")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const clicked = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + /* static */ const check = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + /* static */ const e = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); + ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(i / 7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr = STATIC("arr_", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + ImGui.Separator(); + ImGui.LabelText("label", "Value"); + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1 = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + // General BeginCombo() API, you have full control over your selection data and display type + const items = ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS"]; + /* static */ const current_item_2 = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) { + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(items); n++) { + const is_selected = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + { + /* static */ const str0 = STATIC("str0", new imgui_4.ImStringBuffer(128, "Hello, world!")); + /* static */ const i0 = STATIC("i0", 123); + /* static */ const f0 = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, imgui_3.IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); + ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); + ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + /* static */ const vec4a = STATIC("vec4a", [0.10, 0.20, 0.30, 0.44]); + ImGui.InputFloat3("input float3", vec4a.value); + } + { + /* static */ const i1 = STATIC("i1#415", 50), i2 = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); + ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + /* static */ const f1 = STATIC("f1#421", 1.00), f2 = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + { + /* static */ const i1 = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); + ShowHelpMarker("CTRL+click to input value."); + /* static */ const f1 = STATIC("f1#427", 0.123), f2 = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + /* static */ const col1 = STATIC("col1", [1.0, 0.0, 0.2]); + /* static */ const col2 = STATIC("col2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit4("color 2", col2.value); + const listbox_items = ["Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon"]; + /* static */ const listbox_item_current = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + /* static */ const listbox_item_current2 = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Trees")) { + if (ImGui.TreeNode("Basic trees")) { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) + console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Advanced, with Selectable nodes")) { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + /* static */ const selection_mask = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(14 /* IndentSpacing */, ImGui.GetFontSize() * 3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags = 128 /* OpenOnArrow */ | 64 /* OpenOnDoubleClick */ | ((selection_mask.value & (1 << i)) ? 1 /* Selected */ : 0); + if (i < 3) { + // Node + const node_open = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= 256 /* Leaf */ | 8 /* NoTreePushOnOpen */; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Collapsing Headers")) { + /* static */ const closable_group = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Bullets")) { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); + ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); + ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text")) { + if (ImGui.TreeNode("Colored Text")) { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new imgui_7.ImVec4(1.0, 0.0, 1.0, 1.0), "Pink"); + ImGui.TextColored(new imgui_7.ImVec4(1.0, 1.0, 0.0, 1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); + ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Word Wrapping")) { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + /* static */ const wrap_width = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + ImGui.Text("Test paragraph 1:"); + let pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("UTF-8 Text")) { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf = STATIC("buf", new imgui_4.ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Images")) { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io = ImGui.GetIO(); + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id = io.Fonts.TexID; + const my_tex_w = io.Fonts.TexWidth; + const my_tex_h = io.Fonts.TexHeight; + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(my_tex_w, my_tex_h), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + const focus_sz = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; + if (focus_x < 0.0) + focus_x = 0.0; + else if (focus_x > my_tex_w - focus_sz) + focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; + if (focus_y < 0.0) + focus_y = 0.0; + else if (focus_y > my_tex_h - focus_sz) + focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0 = new imgui_6.ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1 = new imgui_6.ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(128, 128), uv0, uv1, new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); + let frame_padding = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new imgui_6.ImVec2(32, 32), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(32.0 / my_tex_w, 32 / my_tex_h), frame_padding, new imgui_7.ImVec4(0, 0, 0, 1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Selectables")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const selected = STATIC("selected#672", [false, true, false, false]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], 4 /* AllowDoubleClick */)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) { + /* static */ const selected = STATIC("selected#687", [false, false, false]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); + ImGui.SameLine(300); + ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) { + ImGui.Columns(3, null, false); + /* static */ const selected = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) { + const label = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) { + /* static */ const selected = STATIC("selected#712", [true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true]); + for (let i = 0; i < 16; i++) { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new imgui_6.ImVec2(50, 50))) { + let x = i % 4, y = i / 4; + if (x > 0) + selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) + selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) + selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) + selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) + ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Filtered Text Input")) { + /* static */ const buf1 = STATIC("buf1", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("default", buf1.value, imgui_3.IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2 = STATIC("buf2", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("decimal", buf2.value, imgui_3.IM_ARRAYSIZE(buf2.value), 1 /* CharsDecimal */); + /* static */ const buf3 = STATIC("buf3", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("hexadecimal", buf3.value, imgui_3.IM_ARRAYSIZE(buf3.value), 2 /* CharsHexadecimal */ | 4 /* CharsUppercase */); + /* static */ const buf4 = STATIC("buf4", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("uppercase", buf4.value, imgui_3.IM_ARRAYSIZE(buf4.value), 4 /* CharsUppercase */); + /* static */ const buf5 = STATIC("buf5", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("no blank", buf5.value, imgui_3.IM_ARRAYSIZE(buf5.value), 8 /* CharsNoBlank */); + class TextFilters { + static FilterImGuiLetters(data) { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) + return 0; return 1; } + } + /* static */ const buf6 = STATIC("buf6", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("\"imgui\" letters", buf6.value, imgui_3.IM_ARRAYSIZE(buf6.value), 512 /* CallbackCharFilter */, TextFilters.FilterImGuiLetters); + ImGui.Text("Password input"); + /* static */ const bufpass = STATIC("bufpass", new imgui_4.ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 32768 /* Password */ | 8 /* CharsNoBlank */); + ImGui.SameLine(); + ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 8 /* CharsNoBlank */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-line Text Input")) { + /* static */ const read_only = STATIC("read_only", false); + /* static */ const text = STATIC("text", new imgui_4.ImStringBuffer(1024 * 16, "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, imgui_3.IM_ARRAYSIZE(text.value), new imgui_6.ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), 1024 /* AllowTabInput */ | (read_only.value ? 16384 /* ReadOnly */ : 0)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Plots widgets")) { + /* static */ const animate = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + /* static */ const arr = STATIC("arr", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + ImGui.PlotLines_Array("Frame Times", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset = STATIC("values_offset", 0); + /* static */ const refresh_time = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) { + /* static */ const phase = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value + 1) % imgui_3.IM_ARRAYSIZE(values.value); + phase.value += 0.10 * values_offset.value; + refresh_time.value += 1.0 / 60.0; + } + ImGui.PlotLines_Array("Lines", values.value, imgui_3.IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, imgui_3.IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new imgui_6.ImVec2(0, 80)); + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs { + static Sin(data, i) { return Math.sin(i * 0.1); } + static Saw(data, i) { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type = STATIC("func_type", 0), display_count = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); + ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.Separator(); + // Animate a simple progress bar + /* static */ const progress = STATIC("progress", 0.0), progress_dir = STATIC("progress_dir", 1.0); + if (animate.value) { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { + progress.value = +1.1; + progress_dir.value *= -1.0; + } + if (progress.value <= -0.1) { + progress.value = -0.1; + progress_dir.value *= -1.0; + } + } + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0.0, 0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + const progress_saturated = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf = `${(progress_saturated * 1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0., 0.), buf); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Color/Picker Widgets")) { + /* static */ const color = STATIC("color#863", new imgui_9.ImColor(114, 144, 154, 200).toImVec4()); + /* static */ const hdr = STATIC("hdr", false); + /* static */ const alpha_preview = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview = STATIC("alpha_half_preview", false); + /* static */ const options_menu = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); + ImGui.SameLine(); + ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); + ImGui.SameLine(); + ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags = (hdr.value ? 4096 /* HDR */ : 0) | (alpha_half_preview.value ? 2048 /* AlphaPreviewHalf */ : (alpha_preview.value ? 1024 /* AlphaPreview */ : 0)) | (options_menu.value ? 0 : 8 /* NoOptions */); + ImGui.Text("Color widget:"); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, 16384 /* HSV */ | misc_flags); + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, 131072 /* Float */ | misc_flags); + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); + ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, 32 /* NoInputs */ | 128 /* NoLabel */ | misc_flags); + ImGui.Text("Color button with Custom Picker Popup:"); + // Generate a dummy palette + /* static */ const saved_palette_inited = STATIC("saved_palette_inited", false); + /* static */ const saved_palette = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) { + saved_palette.value[n] = new imgui_7.ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r = [0.0]; + const g = [0.0]; + const b = [0.0]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + /* static */ const backup_color = STATIC("backup_color", new imgui_7.ImVec4()); + let open_popup = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | 256 /* NoSidePreview */ | 16 /* NoSmallPreview */); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(saved_palette.value); n++) { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], 2 /* NoAlpha */ | 4 /* NoPicker */ | 64 /* NoTooltip */, new imgui_6.ImVec2(20, 20))) + color.value.Copy(new imgui_7.ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + if (ImGui.BeginDragDropTarget()) { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new imgui_6.ImVec2(80, 80)); + ImGui.Text("Color picker:"); + /* static */ const alpha = STATIC("alpha", true); + /* static */ const alpha_bar = STATIC("alpha_bar", true); + /* static */ const side_preview = STATIC("side_preview", true); + /* static */ const ref_color = STATIC("ref_color", false); + /* static */ const ref_color_v = STATIC("ref_color_v", new imgui_7.ImVec4(1.0, 0.0, 1.0, 0.5)); + /* static */ const inputs_mode = STATIC("inputs_mode", 2); + /* static */ const picker_mode = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, 32 /* NoInputs */ | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); + ShowHelpMarker("User can right-click the picker to change mode."); + let flags = misc_flags; + if (!alpha.value) + flags |= 2 /* NoAlpha */; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) + flags |= 512 /* AlphaBar */; + if (!side_preview.value) + flags |= 256 /* NoSidePreview */; + if (picker_mode.value === 1) + flags |= 262144 /* PickerHueBar */; + if (picker_mode.value === 2) + flags |= 524288 /* PickerHueWheel */; + if (inputs_mode.value === 1) + flags |= 32 /* NoInputs */; + if (inputs_mode.value === 2) + flags |= 8192 /* RGB */; + if (inputs_mode.value === 3) + flags |= 16384 /* HSV */; + if (inputs_mode.value === 4) + flags |= 32768 /* HEX */; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); + ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(65536 /* Uint8 */ | 16384 /* HSV */); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(131072 /* Float */ | 8192 /* RGB */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Range Widgets")) { + /* static */ const begin = STATIC("begin", 10), end = STATIC("end", 90); + /* static */ const begin_i = STATIC("begin_i", 100), end_i = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-component Widgets")) { + /* static */ const vec4f = STATIC("vec4f", [0.10, 0.20, 0.30, 0.44]); + /* static */ const vec4i = STATIC("vec4i", [1, 5, 100, 255]); + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Vertical Sliders")) { + const spacing = 4; + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(spacing, spacing)); + /* static */ const int_value = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new imgui_6.ImVec2(18, 160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + /* static */ const values = STATIC("values#1072", [0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(7 /* FrameBg */, imgui_9.ImColor.HSV(i / 7.0, 0.5, 0.5)); + ImGui.PushStyleColor(8 /* FrameBgHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.5)); + ImGui.PushStyleColor(9 /* FrameBgActive */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.5)); + ImGui.PushStyleColor(19 /* SliderGrab */, imgui_9.ImColor.HSV(i / 7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(18, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2 = STATIC("values2", [0.20, 0.80, 0.40, 0.25]); + const rows = 3; + const small_slider_size = new imgui_6.ImVec2(18, (160.0 - (rows - 1) * spacing) / rows); + for (let nx = 0; nx < 4; nx++) { + if (nx > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) { + ImGui.PushID(nx * rows + ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(15 /* GrabMinSize */, 40); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(40, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Layout")) { + if (ImGui.TreeNode("Child regions")) { + /* static */ const disable_mouse_wheel = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + ImGui.Text("Without border"); + /* static */ const line = STATIC("line", 50); + let goto_line = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, 32 /* EnterReturnsTrue */) || goto_line; + ImGui.PopItemWidth(); + ImGui.BeginChild("Sub1", new imgui_6.ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5, 300), false, 2048 /* HorizontalScrollbar */ | (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + for (let i = 0; i < 100; i++) { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + ImGui.SameLine(); + ImGui.PushStyleVar(5 /* ChildRounding */, 5.0); + ImGui.BeginChild("Sub2", new imgui_6.ImVec2(0, 300), true, (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) { + if (i === 50) + ImGui.NextColumn(); + const buf = `${("00000000" + (i * 5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new imgui_6.ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Widgets Width")) { + /* static */ const f = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); + ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Basic Horizontal Layout")) { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + // Text + ImGui.Text("Two items: Hello"); + ImGui.SameLine(); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Adjust spacing + ImGui.Text("More spacing: Hello"); + ImGui.SameLine(0, 20); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); + ImGui.SameLine(); + ImGui.Button("Banana"); + ImGui.SameLine(); + ImGui.Button("Apple"); + ImGui.SameLine(); + ImGui.Button("Corniflower"); + // Button + ImGui.Text("Small buttons"); + ImGui.SameLine(); + ImGui.SmallButton("Like this one"); + ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.Text("x=150"); + ImGui.SameLine(300); + ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.SmallButton("x=150"); + ImGui.SameLine(300); + ImGui.SmallButton("x=300"); + // Checkbox + /* static */ const c1 = STATIC("c1", false), c2 = STATIC("c2", false), c3 = STATIC("c3", false), c4 = STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + // Various + /* static */ const f0 = STATIC("f0#1255", 1.0), f1 = STATIC("f1#1255", 2.0), f2 = STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items = ["AAAA", "BBBB", "CCCC", "DDDD"]; + /* static */ const item = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0, 5.0); + ImGui.PopItemWidth(); + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection = STATIC("selection", [0, 1, 2, 3]); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + // Dummy + const sz = new imgui_6.ImVec2(30, 30); + ImGui.Button("A", sz); + ImGui.SameLine(); + ImGui.Dummy(sz); + ImGui.SameLine(); + ImGui.Button("B", sz); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Groups")) { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size = ImGui.GetItemRectSize(); + const values = [0.5, 0.20, 0.80, 0.60, 0.25]; + ImGui.PlotHistogram_Array("##values", values, imgui_3.IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + ImGui.Button("ACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text Baseline Alignment")) { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + ImGui.Text("One\nTwo\nThree"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + ImGui.Button("HOP##1"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("HOP##2"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("TEST##1"); + ImGui.SameLine(); + ImGui.Text("TEST"); + ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); + ImGui.SameLine(); + ImGui.Button("Widget##1"); + ImGui.SameLine(); + ImGui.Text("Widget"); + ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); + ImGui.SameLine(); + ImGui.Button("Widget##3"); + // Tree + const spacing = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##2"); + if (node_open) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##4"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Scrolling")) { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track = STATIC("track", true); + /* static */ const track_line = STATIC("track_line", 50), scroll_to_px = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); + track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); + scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) + track.value = false; + for (let i = 0; i < 5; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new imgui_6.ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) { + if (track.value && line === track_line.value) { + ImGui.TextColored(new imgui_9.ImColor(255, 255, 0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y = ImGui.GetScrollY(), scroll_max_y = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.Bullet(); + ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); + ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(10 /* FrameRounding */, 3.0); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, ImGui.GetFrameHeightWithSpacing() * 7 + 30), true, 2048 /* HorizontalScrollbar */); + for (let line = 0; line < lines.value; line++) { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) { + if (n > 0) + ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf = n.toFixed(0); + const label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; + const hue = n * 0.05; + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new imgui_6.ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x = ImGui.GetScrollX(), scroll_max_x = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta = 0.0; + ImGui.SmallButton("<<"); + if (ImGui.IsItemActive()) + scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text("Scroll from code"); + ImGui.SameLine(); + ImGui.SmallButton(">>"); + if (ImGui.IsItemActive()) + scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Clipping")) { + /* static */ const size = STATIC("size", new imgui_6.ImVec2(100, 100)), offset = STATIC("offset", new imgui_6.ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos = ImGui.GetCursorScreenPos(); + const clip_rect = new imgui_7.ImVec4(pos.x, pos.y, pos.x + size.value.x, pos.y + size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { + offset.value.x += ImGui.GetIO().MouseDelta.x; + offset.value.y += ImGui.GetIO().MouseDelta.y; + } + ImGui.GetWindowDrawList().AddRectFilled(pos, new imgui_6.ImVec2(pos.x + size.value.x, pos.y + size.value.y), imgui_8.IM_COL32(90, 90, 120, 255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize() * 2.0, new imgui_6.ImVec2(pos.x + offset.value.x, pos.y + offset.value.y), imgui_8.IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Popups & Modal windows")) { + if (ImGui.TreeNode("Popups")) { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + /* static */ const selected_fish = STATIC("selected_fish", -1); + const names = ["Bream", "Haddock", "Mackerel", "Pollock", "Tilefish"]; + /* static */ const toggles = STATIC("toggles", [true, false, false, false, false]); + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Context menus")) { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) { + if (ImGui.Selectable("Set to zero")) + value.value = 0.0; + if (ImGui.Selectable("Set to PI")) + value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + /* static */ const name = STATIC("name", new imgui_4.ImStringBuffer(32, "Label1")); + const buf = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, imgui_3.IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); + ImGui.Text("(<-- right-click here)"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Modals")) { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, 64 /* AlwaysAutoResize */)) { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + /* static */ const dont_ask_me_next_time = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + if (ImGui.Button("OK", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color = STATIC("color#2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Menus inside a regular window")) { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Columns")) { + ImGui.PushID("Columns"); + // Basic columns + if (ImGui.TreeNode("Basic")) { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) { + const label = `Item ${n}`; + if (ImGui.Selectable(label)) { } + if (ImGui.Button(label, new imgui_6.ImVec2(-1, 0))) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); + ImGui.NextColumn(); + ImGui.Text("Name"); + ImGui.NextColumn(); + ImGui.Text("Path"); + ImGui.NextColumn(); + ImGui.Text("Hovered"); + ImGui.NextColumn(); + ImGui.Separator(); + const names = ["One", "Two", "Three"]; + const paths = ["/path/one", "/path/two", "/path/three"]; + /* static */ const selected = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) { + const label = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, 2 /* SpanAllColumns */)) + selected.value = i; + const hovered = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); + ImGui.NextColumn(); + ImGui.Text(paths[i]); + ImGui.NextColumn(); + ImGui.Text(`${hovered}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category A")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Borders")) { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders = STATIC("h_borders", true); + /* static */ const v_borders = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4 * 3; i++) { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.SetNextWindowContentSize(new imgui_6.ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 20), false, 2048 /* HorizontalScrollbar */); + ImGui.Columns(10); + const ITEMS_COUNT = 2000; + const clipper = new imgui_13.ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + const node_open = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); + ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { + ImGui.BulletText("Sailor"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { + ImGui.BulletText("Marin"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + if (ImGui.CollapsingHeader("Filtering")) { + /* static */ const filter = STATIC("filter#1864", new imgui_11.ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines = ["aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world"]; + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + if (ImGui.CollapsingHeader("Inputs & Focus")) { + const io = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); + ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + if (ImGui.TreeNode("Keyboard & Mouse State")) { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (io.MouseDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Mouse clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse dbl-clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseDoubleClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse released:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseReleased(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + ImGui.Text("Keys down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (io.KeysDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Keys pressed:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyPressed(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text("Keys release:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyReleased(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Tabbing")) { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf = STATIC("buf1#1921", new imgui_4.ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focus from code")) { + const focus_1 = ImGui.Button("Focus on 1"); + ImGui.SameLine(); + const focus_2 = ImGui.Button("Focus on 2"); + ImGui.SameLine(); + const focus_3 = ImGui.Button("Focus on 3"); + let has_focus = 0; + /* static */ const buf = STATIC("buf2#1944", new imgui_4.ImStringBuffer(128, "click on a button to set focus")); + if (focus_1) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 1; + if (focus_2) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 2; + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focused & Hovered Test")) { + /* static */ const embed_all_inside_a_child_window = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 25), true); + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(1 /* ChildWindows */)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(2 /* RootWindow */)}\n`); + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(1 /* ChildWindows */)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(2 /* RootWindow */)}\n"`); + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText(`IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(32 /* AllowWhenOverlapped */)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(52 /* RectOnly */)}\n`); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Dragging")) { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) { + // Draw a line between the button and the mouse cursor + const draw_list = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[21 /* Button */]), 4.0); + draw_list.PopClipRect(); + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold = ImGui.GetMouseDragDelta(0); + const mouse_delta = io.MouseDelta; + ImGui.SameLine(); + ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Mouse cursors")) { + const mouse_cursors_names = ["Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE"]; + imgui_2.IM_ASSERT(imgui_3.IM_ARRAYSIZE(mouse_cursors_names) === 7 /* COUNT */); + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); + ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < 7 /* COUNT */; i++) { + const label = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); + ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + ImGui.End(); +} +exports.ShowDemoWindow = ShowDemoWindow; +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +function ShowStyleSelector(label) { + /* static */ const style_idx = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) { + switch (style_idx.value) { + case 0: + ImGui.StyleColorsClassic(); + break; + case 1: + ImGui.StyleColorsDark(); + break; + case 2: + ImGui.StyleColorsLight(); + break; + } + return true; + } + return false; +} +exports.ShowStyleSelector = ShowStyleSelector; +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +function ShowFontSelector(label) { + const io = ImGui.GetIO(); + const font_current = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker("- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} +exports.ShowFontSelector = ShowFontSelector; +function ShowStyleEditor(ref = null) { + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style = ImGui.GetStyle(); + /* static */ const ref_saved_style = STATIC("ref_saved_style", new imgui_10.ImGuiStyle()); + // Default to using internal storage as reference + /* static */ const init = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + if (ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ ShowFontSelector("Fonts##Selector"); + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { + let window_border = (style.WindowBorderSize > 0.0); + if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) + style.WindowBorderSize = window_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let frame_border = (style.FrameBorderSize > 0.0); + if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) + style.FrameBorderSize = frame_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let popup_border = (style.PopupBorderSize > 0.0); + if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) + style.PopupBorderSize = popup_border ? 1.0 : 0.0; + } + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + if (ImGui.TreeNode("Rendering")) { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); + ImGui.SameLine(); + ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) + style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Settings")) { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); + ImGui.SameLine(); + ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Colors")) { + /* static */ const output_dest = STATIC("output_dest", 0); + /* static */ const output_only_modified = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < 43 /* COUNT */; i++) { + const col = style.Colors[i]; + const name = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); + ImGui.PushItemWidth(120); + ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + /* static */ const filter = STATIC("filter#2223", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + /* static */ const alpha_flags = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, 1024 /* AlphaPreview */); + ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, 2048 /* AlphaPreviewHalf */); + ImGui.BeginChild("#colors", new imgui_6.ImVec2(0, 300), true, 16384 /* AlwaysVerticalScrollbar */ | 32768 /* AlwaysHorizontalScrollbar */); + ImGui.PushItemWidth(-160); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], 512 /* AlphaBar */ | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Save")) + ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Revert")) + style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + ImGui.TreePop(); + } + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened = ImGui.TreeNode("Fonts"); + if (fonts_opened) { + const atlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) { + ImGui.Image(atlas.TexID, new imgui_6.ImVec2(atlas.TexWidth, atlas.TexHeight), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_9.ImColor(255, 255, 255, 255).Value, new imgui_9.ImColor(255, 255, 255, 128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + ImGui.PopItemWidth(); +} +exports.ShowStyleEditor = ShowStyleEditor; +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar() { + if (ImGui.BeginMainMenuBar()) { + if (ImGui.BeginMenu("File")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) { + if (ImGui.MenuItem("Undo", "CTRL+Z")) { } + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) { } // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) { } + if (ImGui.MenuItem("Copy", "CTRL+C")) { } + if (ImGui.MenuItem("Paste", "CTRL+V")) { } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} +function ShowExampleMenuFile() { + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) { } + if (ImGui.MenuItem("Open", "Ctrl+O")) { } + if (ImGui.BeginMenu("Open Recent")) { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) { } + if (ImGui.MenuItem("Save As..")) { } + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) { + /* static */ const enabled = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f = STATIC("f#2408", 0.5); + /* static */ const n = STATIC("n", 0); + /* static */ const b = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) { + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) { + imgui_2.IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) { } + if (ImGui.MenuItem("Quit", "Alt+F4")) { } +} +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open) { + if (!ImGui.Begin("Example: Auto-resizing window", p_open, 64 /* AlwaysAutoResize */)) { + ImGui.End(); + return; + } + /* static */ const lines = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open) { + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static Square(data) { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + static Step(data) { + const step = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + /* static */ const auto_resize = STATIC("auto_resize", false); + /* static */ const type = STATIC("type", 0); + /* static */ const display_lines = STATIC("display_lines", 10); + if (type.value === 0) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 0), new imgui_6.ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, -1), new imgui_6.ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(100, 100), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(400, -1), new imgui_6.ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 400), new imgui_6.ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100); // Fixed Step + const flags = auto_resize.value ? 64 /* AlwaysAutoResize */ : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) { + const desc = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(200, 200)); + } + ImGui.SameLine(); + if (ImGui.Button("500x500")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(500, 500)); + } + ImGui.SameLine(); + if (ImGui.Button("800x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(800, 200)); + } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, imgui_3.IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open) { + const DISTANCE = 10.0; + /* static */ const corner = STATIC("corner", 0); + const window_pos = new imgui_6.ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot = new imgui_6.ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, 1 /* Always */, window_pos_pivot); + ImGui.PushStyleColor(2 /* WindowBg */, new imgui_7.ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, 1 /* NoTitleBar */ | 2 /* NoResize */ | 64 /* AlwaysAutoResize */ | 4 /* NoMove */ | 256 /* NoSavedSettings */)) { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) + corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) + corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) + corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) + corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open) { + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 100), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 200), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf = `Animated title ${"|/-\\".charAt((ImGui.GetTime() / 0.25) & 3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 300), 4 /* FirstUseEver */); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(350, 560), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Custom rendering", p_open)) { + ImGui.End(); + return; + } + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list = ImGui.GetWindowDrawList(); + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz = STATIC("sz", 36.0); + /* static */ const col = STATIC("color#2583", new imgui_7.ImVec4(1.0, 1.0, 0.4, 1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value); + { + const p = ImGui.GetCursorScreenPos(); + const col32 = imgui_8.IM_COL32(col.value.x * 255, col.value.y * 255, col.value.z * 255, col.value.w * 255); + let x = p.x + 4.0, y = p.y + 4.0, spacing = 8.0; + for (let n = 0; n < 2; n++) { + const thickness = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 20, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 0.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */, thickness); + x += sz.value + spacing; + draw_list.AddTriangle(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x, y + sz.value), col32, thickness); + x += spacing; + draw_list.AddBezierCurve(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value * 1.3, y + sz.value * 0.3), new imgui_6.ImVec2(x + sz.value - sz.value * 1.3, y + sz.value - sz.value * 0.3), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x = p.x + 4; + y += sz.value + spacing; + } + draw_list.AddCircleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */); + x += sz.value + spacing; + draw_list.AddTriangleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32); + x += sz.value + spacing; + draw_list.AddRectFilledMultiColor(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), imgui_8.IM_COL32(0, 0, 0), imgui_8.IM_COL32(255, 0, 0), imgui_8.IM_COL32(255, 255, 0), imgui_8.IM_COL32(0, 255, 0)); + ImGui.Dummy(new imgui_6.ImVec2((sz.value + spacing) * 8, (sz.value + spacing) * 3)); + } + ImGui.Separator(); + { + /* static */ const points = STATIC("points", new imgui_5.ImVector()); + /* static */ const adding_line = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) + points.value.clear(); + if (points.value.Size >= 2) { + ImGui.SameLine(); + if (ImGui.Button("Undo")) { + points.value.pop_back(); + points.value.pop_back(); + } + } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) + canvas_size.x = 50.0; + if (canvas_size.y < 50.0) + canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(50, 50, 50), imgui_8.IM_COL32(50, 50, 60), imgui_8.IM_COL32(60, 60, 70), imgui_8.IM_COL32(50, 50, 60)); + draw_list.AddRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(255, 255, 255)); + let adding_preview = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas = new imgui_6.ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) { + if (!adding_line.value && ImGui.IsMouseClicked(0)) { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i + 1].x, canvas_pos.y + points.value.Data[i + 1].y), imgui_8.IM_COL32(255, 255, 0, 255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + constructor() { + // char InputBuf[256]; + this.InputBuf = new imgui_4.ImStringBuffer(256, ""); + // ImVector Items; + this.Items = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + // ImVector History; + this.History = new imgui_5.ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + this.HistoryPos = -1; + // ImVector Commands; + this.Commands = new imgui_5.ImVector(); + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + delete() { } + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + ClearLog() { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + // void Draw(const char* title, bool* p_open) + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin(title, p_open)) { + ImGui.End(); + return; + } + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + // TODO: display items starting from the bottom + if (ImGui.SmallButton("Add Dummy Text")) { + this.AddLog(`${this.Items.Size} some text`); + this.AddLog("some more text"); + this.AddLog("display very important message here!"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { + this.AddLog("[error] something went wrong"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { + this.ClearLog(); + } + ImGui.SameLine(); + const copy_to_clipboard = ImGui.SmallButton("Copy"); + ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) + this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + ImGui.Separator(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + /* static */ const filter = STATIC("filter#2763", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + const footer_height_to_reserve = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new imgui_6.ImVec2(0, -footer_height_to_reserve), false, 2048 /* HorizontalScrollbar */); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.Selectable("Clear")) + this.ClearLog(); + ImGui.EndPopup(); + } + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(4, 1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) { + // const char* item = Items[i]; + const item = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col = new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) + col = new imgui_7.ImVec4(1.0, 0.4, 0.4, 1.0); + else if (/^# /.test(item)) + col = new imgui_7.ImVec4(1.0, 0.78, 0.58, 1.0); + ImGui.PushStyleColor(0 /* Text */, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + // Command-line + if (ImGui.InputText("Input", this.InputBuf, imgui_3.IM_ARRAYSIZE(this.InputBuf), 32 /* EnterReturnsTrue */ | 64 /* CallbackCompletion */ | 128 /* CallbackHistory */, ExampleAppConsole.TextEditCallbackStub, this)) { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(3 /* RootAndChildWindows */) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + ImGui.End(); + } + // void ExecCommand(const char* command_line) + ExecCommand(command_line) { + this.AddLog(`# ${command_line}\n`); + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size - 1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") { + this.ClearLog(); + } + else if (command_line.toUpperCase() === "HELP") { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + else if (command_line.toUpperCase() === "HISTORY") { + const first = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data) { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console = data.UserData; + return console.TextEditCallback(data); + } + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data) { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) { + case 64 /* CallbackCompletion */: + { + // Example of TEXT COMPLETION + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + break; + } + case 128 /* CallbackHistory */: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} +function ShowExampleAppConsole(p_open) { + /* static */ const console = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog { + constructor() { + // ImGuiTextBuffer Buf; + this.Buf = new imgui_12.ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + this.Filter = new imgui_11.ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + this.LineOffsets = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + } + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear() { this.Buf.clear(); this.LineOffsets.clear(); } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + let old_size = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 400), 4 /* FirstUseEver */); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) + this.Clear(); + ImGui.SameLine(); + const copy = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, 0), false, 2048 /* HorizontalScrollbar */); + if (copy) + ImGui.LogToClipboard(); + if (this.Filter.IsActive()) { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else { + ImGui.TextUnformatted(this.Buf.begin()); + } + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open) { + /* static */ const log = STATIC("log#3073", new ExampleAppLog()); + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time = STATIC("last_time", -1.0); + const time = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) { + const random_words = ["system", "info", "warning", "error", "fatal", "notice", "log"]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * imgui_3.IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + log.value.Draw("Example: Log", p_open); +} +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 440), 4 /* FirstUseEver */); + if (ImGui.Begin("Example: Layout", p_open, 1024 /* MenuBar */)) { + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("File")) { + if (ImGui.MenuItem("Close")) + p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + // left + /* static */ const selected = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new imgui_6.ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) { + const label = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new imgui_6.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) { } + ImGui.SameLine(); + if (ImGui.Button("Save")) { } + ImGui.EndGroup(); + } + ImGui.End(); +} +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(430, 450), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Property editor", p_open)) { + ImGui.End(); + return; + } + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2, 2)); + ImGui.Columns(2); + ImGui.Separator(); + class funcs { + static ShowDummyObject(prefix, uid) { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) { + /* static */ const dummy_members = STATIC("dummy_members", [0.0, 0.0, 1.0, 3.1416, 100.0, 999.0]); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) { + funcs.ShowDummyObject("Child", 424242); + } + else { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref = [dummy_members.value[i] || 0]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Long text display", p_open)) { + ImGui.End(); + return; + } + /* static */ const test_type = STATIC("test_type", 0); + /* static */ const log = STATIC("log#3217", new imgui_12.ImGuiTextBuffer()); + /* static */ const lines = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { + log.value.clear(); + lines.value = 0; + } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value + i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + const clipper = new imgui_13.ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} +// End of Demo code +// #else +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} +// #endif +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2RlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQixjQUFjOztBQUVkLGlHQUFpRztBQUNqRyxzSUFBc0k7QUFDdEksdUdBQXVHO0FBQ3ZHLGdKQUFnSjtBQUNoSiwwSkFBMEo7QUFDMUosMEZBQTBGO0FBQzFGLHNLQUFzSztBQUN0Syx3SEFBd0g7QUFDeEgsYUFBYTtBQUNiLCtEQUErRDtBQUUvRCxzSkFBc0o7QUFDdEosaUpBQWlKO0FBQ2pKLHNJQUFzSTtBQUN0SSw0SkFBNEo7QUFDNUosa0tBQWtLO0FBRWxLLDZEQUE2RDtBQUM3RCxrQ0FBa0M7QUFDbEMsU0FBUztBQUVULHFCQUFxQjtBQUNyQixrREFBa0Q7QUFDbEQsd0VBQXdFO0FBQ3hFLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsb0VBQW9FO0FBQ3BFLDBDQUEwQztBQUMxQyxRQUFRO0FBQ1IsMENBQTBDO0FBQzFDLFNBQVM7QUFFVCxpQ0FBaUM7QUFDakMsbUNBQXdDO0FBQ3hDLG1DQUFvQztBQUNwQyxtQ0FBdUM7QUFDdkMsbUNBQXlDO0FBcUJ6QyxtQ0FBbUM7QUFDbkMsbUNBQW1EO0FBQ25ELG1DQUFtRDtBQUNuRCxtQ0FBbUM7QUFDbkMsbUNBQWtDO0FBRWxDLG9DQUFxQztBQUVyQyxvQ0FBMEM7QUFDMUMsb0NBQTBDO0FBQzFDLG9DQUEyQztBQUkzQyxrQkFBa0I7QUFDbEIsa0lBQWtJO0FBQ2xJLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLCtKQUErSjtBQUMvSixzTUFBc007QUFDdE0sZ0lBQWdJO0FBQ2hJLDhIQUE4SDtBQUM5SCx3VEFBd1Q7QUFDeFQsMkNBQTJDO0FBQzNDLHFJQUFxSTtBQUNySSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLDZIQUE2SDtBQUM3SCw0SUFBNEk7QUFDNUksNkpBQTZKO0FBQzdKLG1JQUFtSTtBQUNuSSxzQkFB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QUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzlMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUMzQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUss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LEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2hILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxD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QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQy9NLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxD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QUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzdJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzlJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQ0FBb0QsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUM3SyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQ25LLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUMzRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUNqSCxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUssQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ2xHLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztRQUMxQixDQUFDO1FBQ0QsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1FBQ3RILFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDNUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxjQUFNLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDbEgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxjQUFNLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGtDQUFvRCxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDeEssU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDOUosU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQVEsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFRLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BLLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7UUFDRyxZQUFZLENBQUMsTUFBTSxNQUFNLEdBQTZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxnQkFBUSxFQUFVLENBQUMsQ0FBQztRQUMvRixZQUFZLENBQUMsTUFBTSxXQUFXLEdBQW9CLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFBQyxDQUFDO1FBQUMsQ0FBQztRQUNqSSxLQUFLLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7UUFFckUsd0hBQXdIO1FBQ3hILDRJQUE0STtRQUM1SSxpSEFBaUg7UUFDakgsTUFBTSxVQUFVLEdBQVcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBWSwwQ0FBMEM7UUFDNUcsTUFBTSxXQUFXLEdBQVcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBUSxvQ0FBb0M7UUFDdEcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMvQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQy9DLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxjQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBRSxnQkFBUSxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RNLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3SCxJQUFJLGNBQWMsR0FBWSxLQUFLLENBQUM7UUFDcEMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0MsTUFBTSxtQkFBbUIsR0FBVyxJQUFJLGNBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqSSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQ3RCLENBQUM7WUFDRyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUMxQixDQUFDO1lBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztnQkFDRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM1QyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM3QixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSx1REFBdUQ7UUFDMUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,bBIAANyFAAAIAAAAGAAAAAASAADshQAAiBIAAPuFAAAAAAAAAQAAADgAAAAAAAAAABIAADqGAAAAEgAAZ4YAAAASAACjhgAAABIAAK+GAABsEgAAzYYAAAgAAABoAAAAABIAAOWGAABsEgAA/IYAAAAAAACAAAAAABIAAAqHAABsEgAAG4cAAAAAAACYAAAAABIAACmHAABsEgAA6ogAAAAAAACwAAAAABIAAAeJAABsEgAAcYkAAAAAAADIAAAAABIAAHqJAABsEgAAgokAAAEAAABIAAAAbBIAAJGKAAAAAAAA8AAAAAASAAC0igAAbBIAAOCKAAAAAAAACAEAAAASAADuigAAbBIAAPuKAAAAAAAAIAEAAAASAAAFiwAAbBIAABGNAAAAAAAASAAAAGwSAAAajQAAAAAAAFAAAABsEgAAJY0AAAEAAACYAAAAbBIAAMCOAAABAAAAIAEAAGwSAADLjgAAAAAAAHgBAAAAEgAA2o4AAGwSAAAsjwAAAQAAAHgBAAAAEgAAUI8AAGwSAACNjwAAAQAAAMgAAABsEgAA8o8AAAEAAAAIAQAAbBIAAAGQAAABAAAAgAAAAAASAABmkQAAbBIAAKKRAAABAAAA4AEAAAASAACvkQAAbBIAAOSRAAAAAAAA4AEAAGwSAABGkgAAAAAAAAgCAAAAEgAAWpIAAGwSAABzkgAAAQAAAAgCAABsEgAAzZIAAAEAAABQAAAAbBIAANeSAAABAAAA8AAAAGwSAAC2kwAAAQAAALAAAAAAEgAAZpYAAAASAACllgAAABIAAOOWAAAAEgAAKZcAAAASAABmlwAAABIAAIWXAAAAEgAApJcAAAASAADDlwAAABIAAOKXAAAAEgAAAZgAAIgSAAA+mAAAAAAAAAEAAAA4AAAAAAAAAIgSAAB9mAAAAAAAAAEAAAA4AAAAAAAAAAASAABDpAAAKBIAAKOkAADoAgAAAAAAACgSAABQpAAA+AIAAAAAAAAAEgAAcaQAACgSAAB+pAAA2AIAAAAAAAAoEgAAqaUAAOgCAAAAAAAAKBIAAIWlAAAQAwAAAAAAACgSAADLpQAA6AIAAAAAAABQEgAA86UAAGwSAAD1pQAAAAAAAEADAABQEgAA+KUAAFASAAD7pQAAUBIAAP2lAABQEgAA/6UAAFASAAABpgAAUBIAAAOmAABQEgAABaYAAFASAAAHpgAAUBIAAAmmAABQEgAAC6YAAFASAAANpgAAUBIAAA+mAABQEgAAEaYAACgSAAATpgAA2AIAAAAAAADkpgAAlCQAAJgkAACcJAAAoCQAAKQkAACkJAAApCQAAKQkAACqJAAAsiQAALokAADCJAAAyiQAANIkAADaJAAAwiQAAOIkAADiJAAA4iQAAOIkAADoJAAA8CQAAPgkAAAAJQAACCUAABAlAAAYJQAAACUAAP8AAP///wD/AP8A/wD///8AAP///wD///8AAP8DAAAAAQAAAAAAAAACAAAAAQAAAAMAAAACAAAAAAAAAAEAAAAAAAAAAgAAAAQAAAABAAAADAAAAAEAAAAQAAAAAgAAABQAAAABAAAAJAAAAAEAAAAoAAAAAQAAACwAAAABAAAAMAAAAAIAAAA0AAAAAQAAADwAAAABAAAAQAAAAAIAAABEAAAAAgAAAEwAAAABAAAAXAAAAAEAAABsAAAAAgAAAHQAAAAAAIA/zczMPQrXIzxvEoM6F7fROKzFJze9N4Y1lb/WM3fMKzJfcIkwAAAAAAAAQEAAAEBBAACYQQAAAAAAAAAAAABQQQAAAAAAAOBAAACAQQAAgEAAAABBAAD4QQAAAAAAALhBAAC4QQAAMEEAADBBAACoQQAAAAAAABBBAAC4QQAAoEAAADBBAABcQgAAkEEAALhBAAAQQQAAMEEAAKBAAACSQgAAAAAAAIhBAACIQQAAEEEAABBBAABcQgAAAAAAAIhBAACIQQAAEEEAABBBCAAAACAAAABIAwAAQAAAAJgDAABAAAAAkAMAALADAABAAAAAYAMAAEAAAACwAwAAYAMAAEAAAABAAAAAYAMAAGADAACQAwAAsAMAAJADAACQAwAAsAMAALADAABgAwAAkAMAAGADAACQAwAAkAMAAEADAACwAwAAsAMAALADAABAAAAAQAAAAEAAAACYAwAASAAAAEAAAACYAwAAQAAAAGADAACYAwAAUAAAAJADAABAAwAAkAMAALADAABAAAAAQAAAAEAAAAAgAAAAQAAAAGADAACwAwAAQAAAAEAAAABAAAAAYAMAALADAABAAAAAIAAAAJADAABgAwAAQAAAAEAAAABgAwAAkAMAAEADAACIAAAAQAMAAEAAAABAAAAAYAMAAEAAAAAgAAAAkAMAAGADAAAgAAAAQAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/imgui_demo.js b/imgui_demo.js new file mode 100644 index 0000000..eadc4c6 --- /dev/null +++ b/imgui_demo.js @@ -0,0 +1,2957 @@ +"use strict"; +// dear imgui, v1.53 +// (demo code) +Object.defineProperty(exports, "__esModule", { value: true }); +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +const imgui_4 = require("./imgui"); +const imgui_5 = require("./imgui"); +const imgui_6 = require("./imgui"); +const imgui_7 = require("./imgui"); +const imgui_8 = require("./imgui"); +const imgui_9 = require("./imgui"); +const imgui_10 = require("./imgui"); +const imgui_11 = require("./imgui"); +const imgui_12 = require("./imgui"); +const imgui_13 = require("./imgui"); +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE = "\n"; +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A, _B) { return ((_A) >= (_B)) ? (_A) : (_B); } +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) +class Static { + constructor(value) { + this.value = value; + } +} +const _static = {}; +function STATIC(key, value) { + return _static[key] || (_static[key] = new Static(value)); +} +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); +function ShowHelpMarker(desc) { + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} +function ShowUserGuide() { + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} +exports.ShowUserGuide = ShowUserGuide; +// Demonstrate most ImGui features (big function!) +function ShowDemoWindow(p_open = null) { + // Examples apps + /* static */ const show_app_main_menu_bar = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console = STATIC("show_app_console", false); + /* static */ const show_app_log = STATIC("show_app_log", false); + /* static */ const show_app_layout = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor = STATIC("show_app_style_editor", false); + /* static */ const show_app_metrics = STATIC("show_app_metrics", false); + /* static */ const show_app_about = STATIC("show_app_about", false); + if (show_app_main_menu_bar.value) + ShowExampleAppMainMenuBar(); + if (show_app_console.value) + ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) + ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) + ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) + ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) + ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) + ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) + ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) + ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) + ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) + ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + if (show_app_metrics.value) { + ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); + } + if (show_app_style_editor.value) { + ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ + ShowStyleEditor(); + ImGui.End(); + } + if (show_app_about.value) { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, 64 /* AlwaysAutoResize */); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + /* static */ const no_titlebar = STATIC("no_titlebar", false); + /* static */ const no_scrollbar = STATIC("no_scrollbar", false); + /* static */ const no_menu = STATIC("no_menu", false); + /* static */ const no_move = STATIC("no_move", false); + /* static */ const no_resize = STATIC("no_resize", false); + /* static */ const no_collapse = STATIC("no_collapse", false); + /* static */ const no_close = STATIC("no_close", false); + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags = 0; + if (no_titlebar.value) + window_flags |= 1 /* NoTitleBar */; + if (no_scrollbar.value) + window_flags |= 8 /* NoScrollbar */; + if (!no_menu.value) + window_flags |= 1024 /* MenuBar */; + if (no_move.value) + window_flags |= 4 /* NoMove */; + if (no_resize.value) + window_flags |= 2 /* NoResize */; + if (no_collapse.value) + window_flags |= 32 /* NoCollapse */; + if (no_close.value) + p_open = null; // Don't pass our bool* to Begin + ImGui.SetNextWindowSize(new imgui_6.ImVec2(550, 680), 4 /* FirstUseEver */); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + ImGui.Text(`dear imgui says hello. (${imgui_1.IMGUI_VERSION})`); + // Menu + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("Menu")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ ShowUserGuide(); + } + if (ImGui.CollapsingHeader("Window options")) { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + if (ImGui.TreeNode("Style")) { + /*ImGui.*/ ShowStyleEditor(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Capture/Logging")) { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Widgets")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const clicked = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + /* static */ const check = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + /* static */ const e = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); + ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(i / 7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr = STATIC("arr_", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + ImGui.Separator(); + ImGui.LabelText("label", "Value"); + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1 = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + // General BeginCombo() API, you have full control over your selection data and display type + const items = ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS"]; + /* static */ const current_item_2 = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) { + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(items); n++) { + const is_selected = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + { + /* static */ const str0 = STATIC("str0", new imgui_4.ImStringBuffer(128, "Hello, world!")); + /* static */ const i0 = STATIC("i0", 123); + /* static */ const f0 = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, imgui_3.IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); + ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); + ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + /* static */ const vec4a = STATIC("vec4a", [0.10, 0.20, 0.30, 0.44]); + ImGui.InputFloat3("input float3", vec4a.value); + } + { + /* static */ const i1 = STATIC("i1#415", 50), i2 = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); + ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + /* static */ const f1 = STATIC("f1#421", 1.00), f2 = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + { + /* static */ const i1 = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); + ShowHelpMarker("CTRL+click to input value."); + /* static */ const f1 = STATIC("f1#427", 0.123), f2 = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + /* static */ const col1 = STATIC("col1", [1.0, 0.0, 0.2]); + /* static */ const col2 = STATIC("col2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit4("color 2", col2.value); + const listbox_items = ["Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon"]; + /* static */ const listbox_item_current = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + /* static */ const listbox_item_current2 = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Trees")) { + if (ImGui.TreeNode("Basic trees")) { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) + console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Advanced, with Selectable nodes")) { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + /* static */ const selection_mask = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(14 /* IndentSpacing */, ImGui.GetFontSize() * 3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags = 128 /* OpenOnArrow */ | 64 /* OpenOnDoubleClick */ | ((selection_mask.value & (1 << i)) ? 1 /* Selected */ : 0); + if (i < 3) { + // Node + const node_open = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= 256 /* Leaf */ | 8 /* NoTreePushOnOpen */; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Collapsing Headers")) { + /* static */ const closable_group = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Bullets")) { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); + ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); + ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text")) { + if (ImGui.TreeNode("Colored Text")) { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new imgui_7.ImVec4(1.0, 0.0, 1.0, 1.0), "Pink"); + ImGui.TextColored(new imgui_7.ImVec4(1.0, 1.0, 0.0, 1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); + ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Word Wrapping")) { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + /* static */ const wrap_width = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + ImGui.Text("Test paragraph 1:"); + let pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("UTF-8 Text")) { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf = STATIC("buf", new imgui_4.ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Images")) { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io = ImGui.GetIO(); + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id = io.Fonts.TexID; + const my_tex_w = io.Fonts.TexWidth; + const my_tex_h = io.Fonts.TexHeight; + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(my_tex_w, my_tex_h), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + const focus_sz = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; + if (focus_x < 0.0) + focus_x = 0.0; + else if (focus_x > my_tex_w - focus_sz) + focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; + if (focus_y < 0.0) + focus_y = 0.0; + else if (focus_y > my_tex_h - focus_sz) + focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0 = new imgui_6.ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1 = new imgui_6.ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(128, 128), uv0, uv1, new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); + let frame_padding = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new imgui_6.ImVec2(32, 32), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(32.0 / my_tex_w, 32 / my_tex_h), frame_padding, new imgui_7.ImVec4(0, 0, 0, 1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Selectables")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const selected = STATIC("selected#672", [false, true, false, false]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], 4 /* AllowDoubleClick */)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) { + /* static */ const selected = STATIC("selected#687", [false, false, false]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); + ImGui.SameLine(300); + ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) { + ImGui.Columns(3, null, false); + /* static */ const selected = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) { + const label = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) { + /* static */ const selected = STATIC("selected#712", [true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true]); + for (let i = 0; i < 16; i++) { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new imgui_6.ImVec2(50, 50))) { + let x = i % 4, y = i / 4; + if (x > 0) + selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) + selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) + selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) + selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) + ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Filtered Text Input")) { + /* static */ const buf1 = STATIC("buf1", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("default", buf1.value, imgui_3.IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2 = STATIC("buf2", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("decimal", buf2.value, imgui_3.IM_ARRAYSIZE(buf2.value), 1 /* CharsDecimal */); + /* static */ const buf3 = STATIC("buf3", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("hexadecimal", buf3.value, imgui_3.IM_ARRAYSIZE(buf3.value), 2 /* CharsHexadecimal */ | 4 /* CharsUppercase */); + /* static */ const buf4 = STATIC("buf4", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("uppercase", buf4.value, imgui_3.IM_ARRAYSIZE(buf4.value), 4 /* CharsUppercase */); + /* static */ const buf5 = STATIC("buf5", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("no blank", buf5.value, imgui_3.IM_ARRAYSIZE(buf5.value), 8 /* CharsNoBlank */); + class TextFilters { + static FilterImGuiLetters(data) { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) + return 0; return 1; } + } + /* static */ const buf6 = STATIC("buf6", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("\"imgui\" letters", buf6.value, imgui_3.IM_ARRAYSIZE(buf6.value), 512 /* CallbackCharFilter */, TextFilters.FilterImGuiLetters); + ImGui.Text("Password input"); + /* static */ const bufpass = STATIC("bufpass", new imgui_4.ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 32768 /* Password */ | 8 /* CharsNoBlank */); + ImGui.SameLine(); + ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 8 /* CharsNoBlank */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-line Text Input")) { + /* static */ const read_only = STATIC("read_only", false); + /* static */ const text = STATIC("text", new imgui_4.ImStringBuffer(1024 * 16, "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, imgui_3.IM_ARRAYSIZE(text.value), new imgui_6.ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), 1024 /* AllowTabInput */ | (read_only.value ? 16384 /* ReadOnly */ : 0)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Plots widgets")) { + /* static */ const animate = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + /* static */ const arr = STATIC("arr", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + ImGui.PlotLines_Array("Frame Times", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset = STATIC("values_offset", 0); + /* static */ const refresh_time = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) { + /* static */ const phase = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value + 1) % imgui_3.IM_ARRAYSIZE(values.value); + phase.value += 0.10 * values_offset.value; + refresh_time.value += 1.0 / 60.0; + } + ImGui.PlotLines_Array("Lines", values.value, imgui_3.IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, imgui_3.IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new imgui_6.ImVec2(0, 80)); + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs { + static Sin(data, i) { return Math.sin(i * 0.1); } + static Saw(data, i) { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type = STATIC("func_type", 0), display_count = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); + ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.Separator(); + // Animate a simple progress bar + /* static */ const progress = STATIC("progress", 0.0), progress_dir = STATIC("progress_dir", 1.0); + if (animate.value) { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { + progress.value = +1.1; + progress_dir.value *= -1.0; + } + if (progress.value <= -0.1) { + progress.value = -0.1; + progress_dir.value *= -1.0; + } + } + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0.0, 0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + const progress_saturated = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf = `${(progress_saturated * 1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0., 0.), buf); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Color/Picker Widgets")) { + /* static */ const color = STATIC("color#863", new imgui_9.ImColor(114, 144, 154, 200).toImVec4()); + /* static */ const hdr = STATIC("hdr", false); + /* static */ const alpha_preview = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview = STATIC("alpha_half_preview", false); + /* static */ const options_menu = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); + ImGui.SameLine(); + ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); + ImGui.SameLine(); + ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags = (hdr.value ? 4096 /* HDR */ : 0) | (alpha_half_preview.value ? 2048 /* AlphaPreviewHalf */ : (alpha_preview.value ? 1024 /* AlphaPreview */ : 0)) | (options_menu.value ? 0 : 8 /* NoOptions */); + ImGui.Text("Color widget:"); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, 16384 /* HSV */ | misc_flags); + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, 131072 /* Float */ | misc_flags); + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); + ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, 32 /* NoInputs */ | 128 /* NoLabel */ | misc_flags); + ImGui.Text("Color button with Custom Picker Popup:"); + // Generate a dummy palette + /* static */ const saved_palette_inited = STATIC("saved_palette_inited", false); + /* static */ const saved_palette = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) { + saved_palette.value[n] = new imgui_7.ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r = [0.0]; + const g = [0.0]; + const b = [0.0]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + /* static */ const backup_color = STATIC("backup_color", new imgui_7.ImVec4()); + let open_popup = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | 256 /* NoSidePreview */ | 16 /* NoSmallPreview */); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(saved_palette.value); n++) { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], 2 /* NoAlpha */ | 4 /* NoPicker */ | 64 /* NoTooltip */, new imgui_6.ImVec2(20, 20))) + color.value.Copy(new imgui_7.ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + if (ImGui.BeginDragDropTarget()) { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new imgui_6.ImVec2(80, 80)); + ImGui.Text("Color picker:"); + /* static */ const alpha = STATIC("alpha", true); + /* static */ const alpha_bar = STATIC("alpha_bar", true); + /* static */ const side_preview = STATIC("side_preview", true); + /* static */ const ref_color = STATIC("ref_color", false); + /* static */ const ref_color_v = STATIC("ref_color_v", new imgui_7.ImVec4(1.0, 0.0, 1.0, 0.5)); + /* static */ const inputs_mode = STATIC("inputs_mode", 2); + /* static */ const picker_mode = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, 32 /* NoInputs */ | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); + ShowHelpMarker("User can right-click the picker to change mode."); + let flags = misc_flags; + if (!alpha.value) + flags |= 2 /* NoAlpha */; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) + flags |= 512 /* AlphaBar */; + if (!side_preview.value) + flags |= 256 /* NoSidePreview */; + if (picker_mode.value === 1) + flags |= 262144 /* PickerHueBar */; + if (picker_mode.value === 2) + flags |= 524288 /* PickerHueWheel */; + if (inputs_mode.value === 1) + flags |= 32 /* NoInputs */; + if (inputs_mode.value === 2) + flags |= 8192 /* RGB */; + if (inputs_mode.value === 3) + flags |= 16384 /* HSV */; + if (inputs_mode.value === 4) + flags |= 32768 /* HEX */; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); + ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(65536 /* Uint8 */ | 16384 /* HSV */); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(131072 /* Float */ | 8192 /* RGB */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Range Widgets")) { + /* static */ const begin = STATIC("begin", 10), end = STATIC("end", 90); + /* static */ const begin_i = STATIC("begin_i", 100), end_i = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-component Widgets")) { + /* static */ const vec4f = STATIC("vec4f", [0.10, 0.20, 0.30, 0.44]); + /* static */ const vec4i = STATIC("vec4i", [1, 5, 100, 255]); + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Vertical Sliders")) { + const spacing = 4; + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(spacing, spacing)); + /* static */ const int_value = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new imgui_6.ImVec2(18, 160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + /* static */ const values = STATIC("values#1072", [0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(7 /* FrameBg */, imgui_9.ImColor.HSV(i / 7.0, 0.5, 0.5)); + ImGui.PushStyleColor(8 /* FrameBgHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.5)); + ImGui.PushStyleColor(9 /* FrameBgActive */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.5)); + ImGui.PushStyleColor(19 /* SliderGrab */, imgui_9.ImColor.HSV(i / 7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(18, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2 = STATIC("values2", [0.20, 0.80, 0.40, 0.25]); + const rows = 3; + const small_slider_size = new imgui_6.ImVec2(18, (160.0 - (rows - 1) * spacing) / rows); + for (let nx = 0; nx < 4; nx++) { + if (nx > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) { + ImGui.PushID(nx * rows + ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(15 /* GrabMinSize */, 40); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(40, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Layout")) { + if (ImGui.TreeNode("Child regions")) { + /* static */ const disable_mouse_wheel = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + ImGui.Text("Without border"); + /* static */ const line = STATIC("line", 50); + let goto_line = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, 32 /* EnterReturnsTrue */) || goto_line; + ImGui.PopItemWidth(); + ImGui.BeginChild("Sub1", new imgui_6.ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5, 300), false, 2048 /* HorizontalScrollbar */ | (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + for (let i = 0; i < 100; i++) { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + ImGui.SameLine(); + ImGui.PushStyleVar(5 /* ChildRounding */, 5.0); + ImGui.BeginChild("Sub2", new imgui_6.ImVec2(0, 300), true, (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) { + if (i === 50) + ImGui.NextColumn(); + const buf = `${("00000000" + (i * 5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new imgui_6.ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Widgets Width")) { + /* static */ const f = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); + ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Basic Horizontal Layout")) { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + // Text + ImGui.Text("Two items: Hello"); + ImGui.SameLine(); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Adjust spacing + ImGui.Text("More spacing: Hello"); + ImGui.SameLine(0, 20); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); + ImGui.SameLine(); + ImGui.Button("Banana"); + ImGui.SameLine(); + ImGui.Button("Apple"); + ImGui.SameLine(); + ImGui.Button("Corniflower"); + // Button + ImGui.Text("Small buttons"); + ImGui.SameLine(); + ImGui.SmallButton("Like this one"); + ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.Text("x=150"); + ImGui.SameLine(300); + ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.SmallButton("x=150"); + ImGui.SameLine(300); + ImGui.SmallButton("x=300"); + // Checkbox + /* static */ const c1 = STATIC("c1", false), c2 = STATIC("c2", false), c3 = STATIC("c3", false), c4 = STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + // Various + /* static */ const f0 = STATIC("f0#1255", 1.0), f1 = STATIC("f1#1255", 2.0), f2 = STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items = ["AAAA", "BBBB", "CCCC", "DDDD"]; + /* static */ const item = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0, 5.0); + ImGui.PopItemWidth(); + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection = STATIC("selection", [0, 1, 2, 3]); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + // Dummy + const sz = new imgui_6.ImVec2(30, 30); + ImGui.Button("A", sz); + ImGui.SameLine(); + ImGui.Dummy(sz); + ImGui.SameLine(); + ImGui.Button("B", sz); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Groups")) { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size = ImGui.GetItemRectSize(); + const values = [0.5, 0.20, 0.80, 0.60, 0.25]; + ImGui.PlotHistogram_Array("##values", values, imgui_3.IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + ImGui.Button("ACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text Baseline Alignment")) { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + ImGui.Text("One\nTwo\nThree"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + ImGui.Button("HOP##1"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("HOP##2"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("TEST##1"); + ImGui.SameLine(); + ImGui.Text("TEST"); + ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); + ImGui.SameLine(); + ImGui.Button("Widget##1"); + ImGui.SameLine(); + ImGui.Text("Widget"); + ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); + ImGui.SameLine(); + ImGui.Button("Widget##3"); + // Tree + const spacing = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##2"); + if (node_open) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##4"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Scrolling")) { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track = STATIC("track", true); + /* static */ const track_line = STATIC("track_line", 50), scroll_to_px = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); + track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); + scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) + track.value = false; + for (let i = 0; i < 5; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new imgui_6.ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) { + if (track.value && line === track_line.value) { + ImGui.TextColored(new imgui_9.ImColor(255, 255, 0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y = ImGui.GetScrollY(), scroll_max_y = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.Bullet(); + ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); + ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(10 /* FrameRounding */, 3.0); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, ImGui.GetFrameHeightWithSpacing() * 7 + 30), true, 2048 /* HorizontalScrollbar */); + for (let line = 0; line < lines.value; line++) { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) { + if (n > 0) + ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf = n.toFixed(0); + const label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; + const hue = n * 0.05; + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new imgui_6.ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x = ImGui.GetScrollX(), scroll_max_x = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta = 0.0; + ImGui.SmallButton("<<"); + if (ImGui.IsItemActive()) + scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text("Scroll from code"); + ImGui.SameLine(); + ImGui.SmallButton(">>"); + if (ImGui.IsItemActive()) + scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Clipping")) { + /* static */ const size = STATIC("size", new imgui_6.ImVec2(100, 100)), offset = STATIC("offset", new imgui_6.ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos = ImGui.GetCursorScreenPos(); + const clip_rect = new imgui_7.ImVec4(pos.x, pos.y, pos.x + size.value.x, pos.y + size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { + offset.value.x += ImGui.GetIO().MouseDelta.x; + offset.value.y += ImGui.GetIO().MouseDelta.y; + } + ImGui.GetWindowDrawList().AddRectFilled(pos, new imgui_6.ImVec2(pos.x + size.value.x, pos.y + size.value.y), imgui_8.IM_COL32(90, 90, 120, 255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize() * 2.0, new imgui_6.ImVec2(pos.x + offset.value.x, pos.y + offset.value.y), imgui_8.IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Popups & Modal windows")) { + if (ImGui.TreeNode("Popups")) { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + /* static */ const selected_fish = STATIC("selected_fish", -1); + const names = ["Bream", "Haddock", "Mackerel", "Pollock", "Tilefish"]; + /* static */ const toggles = STATIC("toggles", [true, false, false, false, false]); + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Context menus")) { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) { + if (ImGui.Selectable("Set to zero")) + value.value = 0.0; + if (ImGui.Selectable("Set to PI")) + value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + /* static */ const name = STATIC("name", new imgui_4.ImStringBuffer(32, "Label1")); + const buf = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, imgui_3.IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); + ImGui.Text("(<-- right-click here)"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Modals")) { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, 64 /* AlwaysAutoResize */)) { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + /* static */ const dont_ask_me_next_time = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + if (ImGui.Button("OK", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color = STATIC("color#2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Menus inside a regular window")) { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Columns")) { + ImGui.PushID("Columns"); + // Basic columns + if (ImGui.TreeNode("Basic")) { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) { + const label = `Item ${n}`; + if (ImGui.Selectable(label)) { } + if (ImGui.Button(label, new imgui_6.ImVec2(-1, 0))) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); + ImGui.NextColumn(); + ImGui.Text("Name"); + ImGui.NextColumn(); + ImGui.Text("Path"); + ImGui.NextColumn(); + ImGui.Text("Hovered"); + ImGui.NextColumn(); + ImGui.Separator(); + const names = ["One", "Two", "Three"]; + const paths = ["/path/one", "/path/two", "/path/three"]; + /* static */ const selected = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) { + const label = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, 2 /* SpanAllColumns */)) + selected.value = i; + const hovered = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); + ImGui.NextColumn(); + ImGui.Text(paths[i]); + ImGui.NextColumn(); + ImGui.Text(`${hovered}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category A")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Borders")) { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders = STATIC("h_borders", true); + /* static */ const v_borders = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4 * 3; i++) { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.SetNextWindowContentSize(new imgui_6.ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 20), false, 2048 /* HorizontalScrollbar */); + ImGui.Columns(10); + const ITEMS_COUNT = 2000; + const clipper = new imgui_13.ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + const node_open = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); + ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { + ImGui.BulletText("Sailor"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { + ImGui.BulletText("Marin"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + if (ImGui.CollapsingHeader("Filtering")) { + /* static */ const filter = STATIC("filter#1864", new imgui_11.ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines = ["aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world"]; + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + if (ImGui.CollapsingHeader("Inputs & Focus")) { + const io = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); + ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + if (ImGui.TreeNode("Keyboard & Mouse State")) { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (io.MouseDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Mouse clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse dbl-clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseDoubleClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse released:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseReleased(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + ImGui.Text("Keys down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (io.KeysDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Keys pressed:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyPressed(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text("Keys release:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyReleased(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Tabbing")) { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf = STATIC("buf1#1921", new imgui_4.ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focus from code")) { + const focus_1 = ImGui.Button("Focus on 1"); + ImGui.SameLine(); + const focus_2 = ImGui.Button("Focus on 2"); + ImGui.SameLine(); + const focus_3 = ImGui.Button("Focus on 3"); + let has_focus = 0; + /* static */ const buf = STATIC("buf2#1944", new imgui_4.ImStringBuffer(128, "click on a button to set focus")); + if (focus_1) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 1; + if (focus_2) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 2; + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focused & Hovered Test")) { + /* static */ const embed_all_inside_a_child_window = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 25), true); + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(1 /* ChildWindows */)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(2 /* RootWindow */)}\n`); + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(1 /* ChildWindows */)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(2 /* RootWindow */)}\n"`); + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText(`IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(32 /* AllowWhenOverlapped */)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(52 /* RectOnly */)}\n`); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Dragging")) { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) { + // Draw a line between the button and the mouse cursor + const draw_list = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[21 /* Button */]), 4.0); + draw_list.PopClipRect(); + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold = ImGui.GetMouseDragDelta(0); + const mouse_delta = io.MouseDelta; + ImGui.SameLine(); + ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Mouse cursors")) { + const mouse_cursors_names = ["Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE"]; + imgui_2.IM_ASSERT(imgui_3.IM_ARRAYSIZE(mouse_cursors_names) === 7 /* COUNT */); + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); + ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < 7 /* COUNT */; i++) { + const label = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); + ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + ImGui.End(); +} +exports.ShowDemoWindow = ShowDemoWindow; +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +function ShowStyleSelector(label) { + /* static */ const style_idx = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) { + switch (style_idx.value) { + case 0: + ImGui.StyleColorsClassic(); + break; + case 1: + ImGui.StyleColorsDark(); + break; + case 2: + ImGui.StyleColorsLight(); + break; + } + return true; + } + return false; +} +exports.ShowStyleSelector = ShowStyleSelector; +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +function ShowFontSelector(label) { + const io = ImGui.GetIO(); + const font_current = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker("- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} +exports.ShowFontSelector = ShowFontSelector; +function ShowStyleEditor(ref = null) { + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style = ImGui.GetStyle(); + /* static */ const ref_saved_style = STATIC("ref_saved_style", new imgui_10.ImGuiStyle()); + // Default to using internal storage as reference + /* static */ const init = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + if (ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ ShowFontSelector("Fonts##Selector"); + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { + let window_border = (style.WindowBorderSize > 0.0); + if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) + style.WindowBorderSize = window_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let frame_border = (style.FrameBorderSize > 0.0); + if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) + style.FrameBorderSize = frame_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let popup_border = (style.PopupBorderSize > 0.0); + if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) + style.PopupBorderSize = popup_border ? 1.0 : 0.0; + } + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + if (ImGui.TreeNode("Rendering")) { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); + ImGui.SameLine(); + ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) + style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Settings")) { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); + ImGui.SameLine(); + ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Colors")) { + /* static */ const output_dest = STATIC("output_dest", 0); + /* static */ const output_only_modified = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < 43 /* COUNT */; i++) { + const col = style.Colors[i]; + const name = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); + ImGui.PushItemWidth(120); + ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + /* static */ const filter = STATIC("filter#2223", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + /* static */ const alpha_flags = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, 1024 /* AlphaPreview */); + ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, 2048 /* AlphaPreviewHalf */); + ImGui.BeginChild("#colors", new imgui_6.ImVec2(0, 300), true, 16384 /* AlwaysVerticalScrollbar */ | 32768 /* AlwaysHorizontalScrollbar */); + ImGui.PushItemWidth(-160); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], 512 /* AlphaBar */ | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Save")) + ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Revert")) + style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + ImGui.TreePop(); + } + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened = ImGui.TreeNode("Fonts"); + if (fonts_opened) { + const atlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) { + ImGui.Image(atlas.TexID, new imgui_6.ImVec2(atlas.TexWidth, atlas.TexHeight), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_9.ImColor(255, 255, 255, 255).Value, new imgui_9.ImColor(255, 255, 255, 128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + ImGui.PopItemWidth(); +} +exports.ShowStyleEditor = ShowStyleEditor; +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar() { + if (ImGui.BeginMainMenuBar()) { + if (ImGui.BeginMenu("File")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) { + if (ImGui.MenuItem("Undo", "CTRL+Z")) { } + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) { } // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) { } + if (ImGui.MenuItem("Copy", "CTRL+C")) { } + if (ImGui.MenuItem("Paste", "CTRL+V")) { } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} +function ShowExampleMenuFile() { + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) { } + if (ImGui.MenuItem("Open", "Ctrl+O")) { } + if (ImGui.BeginMenu("Open Recent")) { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) { } + if (ImGui.MenuItem("Save As..")) { } + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) { + /* static */ const enabled = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f = STATIC("f#2408", 0.5); + /* static */ const n = STATIC("n", 0); + /* static */ const b = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) { + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) { + imgui_2.IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) { } + if (ImGui.MenuItem("Quit", "Alt+F4")) { } +} +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open) { + if (!ImGui.Begin("Example: Auto-resizing window", p_open, 64 /* AlwaysAutoResize */)) { + ImGui.End(); + return; + } + /* static */ const lines = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open) { + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static Square(data) { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + static Step(data) { + const step = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + /* static */ const auto_resize = STATIC("auto_resize", false); + /* static */ const type = STATIC("type", 0); + /* static */ const display_lines = STATIC("display_lines", 10); + if (type.value === 0) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 0), new imgui_6.ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, -1), new imgui_6.ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(100, 100), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(400, -1), new imgui_6.ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 400), new imgui_6.ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100); // Fixed Step + const flags = auto_resize.value ? 64 /* AlwaysAutoResize */ : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) { + const desc = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(200, 200)); + } + ImGui.SameLine(); + if (ImGui.Button("500x500")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(500, 500)); + } + ImGui.SameLine(); + if (ImGui.Button("800x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(800, 200)); + } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, imgui_3.IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open) { + const DISTANCE = 10.0; + /* static */ const corner = STATIC("corner", 0); + const window_pos = new imgui_6.ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot = new imgui_6.ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, 1 /* Always */, window_pos_pivot); + ImGui.PushStyleColor(2 /* WindowBg */, new imgui_7.ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, 1 /* NoTitleBar */ | 2 /* NoResize */ | 64 /* AlwaysAutoResize */ | 4 /* NoMove */ | 256 /* NoSavedSettings */)) { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) + corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) + corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) + corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) + corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open) { + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 100), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 200), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf = `Animated title ${"|/-\\".charAt((ImGui.GetTime() / 0.25) & 3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 300), 4 /* FirstUseEver */); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(350, 560), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Custom rendering", p_open)) { + ImGui.End(); + return; + } + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list = ImGui.GetWindowDrawList(); + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz = STATIC("sz", 36.0); + /* static */ const col = STATIC("color#2583", new imgui_7.ImVec4(1.0, 1.0, 0.4, 1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value); + { + const p = ImGui.GetCursorScreenPos(); + const col32 = imgui_8.IM_COL32(col.value.x * 255, col.value.y * 255, col.value.z * 255, col.value.w * 255); + let x = p.x + 4.0, y = p.y + 4.0, spacing = 8.0; + for (let n = 0; n < 2; n++) { + const thickness = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 20, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 0.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */, thickness); + x += sz.value + spacing; + draw_list.AddTriangle(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x, y + sz.value), col32, thickness); + x += spacing; + draw_list.AddBezierCurve(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value * 1.3, y + sz.value * 0.3), new imgui_6.ImVec2(x + sz.value - sz.value * 1.3, y + sz.value - sz.value * 0.3), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x = p.x + 4; + y += sz.value + spacing; + } + draw_list.AddCircleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */); + x += sz.value + spacing; + draw_list.AddTriangleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32); + x += sz.value + spacing; + draw_list.AddRectFilledMultiColor(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), imgui_8.IM_COL32(0, 0, 0), imgui_8.IM_COL32(255, 0, 0), imgui_8.IM_COL32(255, 255, 0), imgui_8.IM_COL32(0, 255, 0)); + ImGui.Dummy(new imgui_6.ImVec2((sz.value + spacing) * 8, (sz.value + spacing) * 3)); + } + ImGui.Separator(); + { + /* static */ const points = STATIC("points", new imgui_5.ImVector()); + /* static */ const adding_line = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) + points.value.clear(); + if (points.value.Size >= 2) { + ImGui.SameLine(); + if (ImGui.Button("Undo")) { + points.value.pop_back(); + points.value.pop_back(); + } + } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) + canvas_size.x = 50.0; + if (canvas_size.y < 50.0) + canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(50, 50, 50), imgui_8.IM_COL32(50, 50, 60), imgui_8.IM_COL32(60, 60, 70), imgui_8.IM_COL32(50, 50, 60)); + draw_list.AddRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(255, 255, 255)); + let adding_preview = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas = new imgui_6.ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) { + if (!adding_line.value && ImGui.IsMouseClicked(0)) { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i + 1].x, canvas_pos.y + points.value.Data[i + 1].y), imgui_8.IM_COL32(255, 255, 0, 255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + constructor() { + // char InputBuf[256]; + this.InputBuf = new imgui_4.ImStringBuffer(256, ""); + // ImVector Items; + this.Items = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + // ImVector History; + this.History = new imgui_5.ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + this.HistoryPos = -1; + // ImVector Commands; + this.Commands = new imgui_5.ImVector(); + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + delete() { } + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + ClearLog() { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + // void Draw(const char* title, bool* p_open) + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin(title, p_open)) { + ImGui.End(); + return; + } + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + // TODO: display items starting from the bottom + if (ImGui.SmallButton("Add Dummy Text")) { + this.AddLog(`${this.Items.Size} some text`); + this.AddLog("some more text"); + this.AddLog("display very important message here!"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { + this.AddLog("[error] something went wrong"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { + this.ClearLog(); + } + ImGui.SameLine(); + const copy_to_clipboard = ImGui.SmallButton("Copy"); + ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) + this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + ImGui.Separator(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + /* static */ const filter = STATIC("filter#2763", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + const footer_height_to_reserve = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new imgui_6.ImVec2(0, -footer_height_to_reserve), false, 2048 /* HorizontalScrollbar */); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.Selectable("Clear")) + this.ClearLog(); + ImGui.EndPopup(); + } + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(4, 1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) { + // const char* item = Items[i]; + const item = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col = new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) + col = new imgui_7.ImVec4(1.0, 0.4, 0.4, 1.0); + else if (/^# /.test(item)) + col = new imgui_7.ImVec4(1.0, 0.78, 0.58, 1.0); + ImGui.PushStyleColor(0 /* Text */, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + // Command-line + if (ImGui.InputText("Input", this.InputBuf, imgui_3.IM_ARRAYSIZE(this.InputBuf), 32 /* EnterReturnsTrue */ | 64 /* CallbackCompletion */ | 128 /* CallbackHistory */, ExampleAppConsole.TextEditCallbackStub, this)) { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(3 /* RootAndChildWindows */) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + ImGui.End(); + } + // void ExecCommand(const char* command_line) + ExecCommand(command_line) { + this.AddLog(`# ${command_line}\n`); + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size - 1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") { + this.ClearLog(); + } + else if (command_line.toUpperCase() === "HELP") { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + else if (command_line.toUpperCase() === "HISTORY") { + const first = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data) { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console = data.UserData; + return console.TextEditCallback(data); + } + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data) { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) { + case 64 /* CallbackCompletion */: + { + // Example of TEXT COMPLETION + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + break; + } + case 128 /* CallbackHistory */: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} +function ShowExampleAppConsole(p_open) { + /* static */ const console = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog { + constructor() { + // ImGuiTextBuffer Buf; + this.Buf = new imgui_12.ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + this.Filter = new imgui_11.ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + this.LineOffsets = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + } + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear() { this.Buf.clear(); this.LineOffsets.clear(); } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + let old_size = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 400), 4 /* FirstUseEver */); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) + this.Clear(); + ImGui.SameLine(); + const copy = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, 0), false, 2048 /* HorizontalScrollbar */); + if (copy) + ImGui.LogToClipboard(); + if (this.Filter.IsActive()) { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else { + ImGui.TextUnformatted(this.Buf.begin()); + } + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open) { + /* static */ const log = STATIC("log#3073", new ExampleAppLog()); + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time = STATIC("last_time", -1.0); + const time = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) { + const random_words = ["system", "info", "warning", "error", "fatal", "notice", "log"]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * imgui_3.IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + log.value.Draw("Example: Log", p_open); +} +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 440), 4 /* FirstUseEver */); + if (ImGui.Begin("Example: Layout", p_open, 1024 /* MenuBar */)) { + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("File")) { + if (ImGui.MenuItem("Close")) + p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + // left + /* static */ const selected = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new imgui_6.ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) { + const label = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new imgui_6.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) { } + ImGui.SameLine(); + if (ImGui.Button("Save")) { } + ImGui.EndGroup(); + } + ImGui.End(); +} +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(430, 450), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Property editor", p_open)) { + ImGui.End(); + return; + } + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2, 2)); + ImGui.Columns(2); + ImGui.Separator(); + class funcs { + static ShowDummyObject(prefix, uid) { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) { + /* static */ const dummy_members = STATIC("dummy_members", [0.0, 0.0, 1.0, 3.1416, 100.0, 999.0]); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) { + funcs.ShowDummyObject("Child", 424242); + } + else { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref = [dummy_members.value[i] || 0]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Long text display", p_open)) { + ImGui.End(); + return; + } + /* static */ const test_type = STATIC("test_type", 0); + /* static */ const log = STATIC("log#3217", new imgui_12.ImGuiTextBuffer()); + /* static */ const lines = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { + log.value.clear(); + lines.value = 0; + } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value + i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + const clipper = new imgui_13.ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} +// End of Demo code +// #else +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} +// #endif +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2RlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQixjQUFjOztBQUVkLGlHQUFpRztBQUNqRyxzSUFBc0k7QUFDdEksdUdBQXVHO0FBQ3ZHLGdKQUFnSjtBQUNoSiwwSkFBMEo7QUFDMUosMEZBQTBGO0FBQzFGLHNLQUFzSztBQUN0Syx3SEFBd0g7QUFDeEgsYUFBYTtBQUNiLCtEQUErRDtBQUUvRCxzSkFBc0o7QUFDdEosaUpBQWlKO0FBQ2pKLHNJQUFzSTtBQUN0SSw0SkFBNEo7QUFDNUosa0tBQWtLO0FBRWxLLDZEQUE2RDtBQUM3RCxrQ0FBa0M7QUFDbEMsU0FBUztBQUVULHFCQUFxQjtBQUNyQixrREFBa0Q7QUFDbEQsd0VBQXdFO0FBQ3hFLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsb0VBQW9FO0FBQ3BFLDBDQUEwQztBQUMxQyxRQUFRO0FBQ1IsMENBQTBDO0FBQzFDLFNBQVM7QUFFVCxpQ0FBaUM7QUFDakMsbUNBQXdDO0FBQ3hDLG1DQUFvQztBQUNwQyxtQ0FBdUM7QUFDdkMsbUNBQXlDO0FBcUJ6QyxtQ0FBbUM7QUFDbkMsbUNBQW1EO0FBQ25ELG1DQUFtRDtBQUNuRCxtQ0FBbUM7QUFDbkMsbUNBQWtDO0FBRWxDLG9DQUFxQztBQUVyQyxvQ0FBMEM7QUFDMUMsb0NBQTBDO0FBQzFDLG9DQUEyQztBQUkzQyxrQkFBa0I7QUFDbEIsa0lBQWtJO0FBQ2xJLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLCtKQUErSjtBQUMvSixzTUFBc007QUFDdE0sZ0lBQWdJO0FBQ2hJLDhIQUE4SDtBQUM5SCx3VEFBd1Q7QUFDeFQsMkNBQTJDO0FBQzNDLHFJQUFxSTtBQUNySSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLDZIQUE2SDtBQUM3SCw0SUFBNEk7QUFDNUksNkpBQTZKO0FBQzdKLG1JQUFtSTtBQUNuSSxzQkFB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QUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzlMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUMzQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUss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LEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2hILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxD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QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQy9NLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxD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QUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzdJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzlJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQ0FBb0QsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUM3SyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxF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QUFFLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSx1REFBdUQ7UUFDMUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/imgui_demo.ts b/imgui_demo.ts new file mode 100644 index 0000000..c7fe652 --- /dev/null +++ b/imgui_demo.ts @@ -0,0 +1,3151 @@ +// dear imgui, v1.53 +// (demo code) + +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) + +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. + +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif + +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif + +import * as ImGui from "./imgui"; +import { IMGUI_VERSION } from "./imgui"; +import { IM_ASSERT } from "./imgui"; +import { IM_ARRAYSIZE } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImAccess } from "./imgui"; +import { ImScalar } from "./imgui"; +import { ImTuple2 } from "./imgui"; +import { ImTuple3 } from "./imgui"; +import { ImTuple4 } from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiColorEditFlags } from "./imgui"; +import { ImGuiCond } from "./imgui"; +import { ImGuiFocusedFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImGuiInputTextFlags } from "./imgui" +import { ImGuiMouseCursor } from "./imgui"; +import { ImGuiSelectableFlags } from "./imgui"; +import { ImGuiStyleVar } from "./imgui"; +import { ImGuiTreeNodeFlags } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; +import { ImGuiSizeConstraintCallbackData } from "./imgui"; +import { ImDrawCornerFlags } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVector } from "./imgui"; +import { interface_ImVec2, ImVec2 } from "./imgui"; +import { interface_ImVec4, ImVec4 } from "./imgui"; +import { IM_COL32 } from "./imgui"; +import { ImColor } from "./imgui"; +import { ImGuiIO } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextFilter } from "./imgui"; +import { ImGuiTextBuffer } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImFont } from "./imgui"; +import { ImFontAtlas } from "./imgui"; + +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif + +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE: string = "\n"; + +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A: number, _B: number): number { return ((_A) >= (_B)) ? (_A) : (_B); } + +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- + +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif + +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) + +class Static { + constructor(public value: T) {} +} + +const _static: {[key: string]: Static} = {}; + +function STATIC(key: string, value: T): Static { + return _static[key] || (_static[key] = new Static(value)); +} + +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); + +function ShowHelpMarker(desc: string): void +{ + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} + +export function ShowUserGuide(): void +{ + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} + +// Demonstrate most ImGui features (big function!) +export function ShowDemoWindow(p_open: ImAccess | ImScalar | null = null): void +{ + // Examples apps + /* static */ const show_app_main_menu_bar: Static = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console: Static = STATIC("show_app_console", false); + /* static */ const show_app_log: Static = STATIC("show_app_log", false); + /* static */ const show_app_layout: Static = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor: Static = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text: Static = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize: Static = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize: Static = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay: Static = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles: Static = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering: Static = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor: Static = STATIC("show_app_style_editor", false); + + /* static */ const show_app_metrics: Static = STATIC("show_app_metrics", false); + /* static */ const show_app_about: Static = STATIC("show_app_about", false); + + if (show_app_main_menu_bar.value) ShowExampleAppMainMenuBar(); + if (show_app_console.value) ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + + if (show_app_metrics.value) { ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); } + if (show_app_style_editor.value) { ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ShowStyleEditor(); ImGui.End(); } + if (show_app_about.value) + { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + + /* static */ const no_titlebar: Static = STATIC("no_titlebar", false); + /* static */ const no_scrollbar: Static = STATIC("no_scrollbar", false); + /* static */ const no_menu: Static = STATIC("no_menu", false); + /* static */ const no_move: Static = STATIC("no_move", false); + /* static */ const no_resize: Static = STATIC("no_resize", false); + /* static */ const no_collapse: Static = STATIC("no_collapse", false); + /* static */ const no_close: Static = STATIC("no_close", false); + + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags: ImGui.WindowFlags = 0; + if (no_titlebar.value) window_flags |= ImGuiWindowFlags.NoTitleBar; + if (no_scrollbar.value) window_flags |= ImGuiWindowFlags.NoScrollbar; + if (!no_menu.value) window_flags |= ImGuiWindowFlags.MenuBar; + if (no_move.value) window_flags |= ImGuiWindowFlags.NoMove; + if (no_resize.value) window_flags |= ImGuiWindowFlags.NoResize; + if (no_collapse.value) window_flags |= ImGuiWindowFlags.NoCollapse; + if (no_close.value) p_open = null; // Don't pass our bool* to Begin + + ImGui.SetNextWindowSize(new ImVec2(550,680), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) + { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + + ImGui.Text(`dear imgui says hello. (${IMGUI_VERSION})`); + + // Menu + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("Menu")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) + { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) + { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) + { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ShowUserGuide(); + } + + if (ImGui.CollapsingHeader("Window options")) + { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + + if (ImGui.TreeNode("Style")) + { + /*ImGui.*/ShowStyleEditor(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Capture/Logging")) + { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Widgets")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const clicked: Static = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) + { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + + /* static */ const check: Static = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + + /* static */ const e: Static = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(i/7.0, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(i/7.0, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(i/7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr: Static = STATIC("arr_", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + + ImGui.Separator(); + + ImGui.LabelText("label", "Value"); + + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1: Static = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + + // General BeginCombo() API, you have full control over your selection data and display type + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" ]; + /* static */ const current_item_2: Static = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) // The second parameter is the label previewed before opening the combo. + { + for (let n = 0; n < IM_ARRAYSIZE(items); n++) + { + const is_selected: boolean = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + + { + /* static */ const str0: Static = STATIC("str0", new ImStringBuffer(128, "Hello, world!")); + /* static */ const i0: Static = STATIC("i0", 123); + /* static */ const f0: Static = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + + /* static */ const vec4a: Static> = STATIC>("vec4a", [ 0.10, 0.20, 0.30, 0.44 ]); + ImGui.InputFloat3("input float3", vec4a.value); + } + + { + /* static */ const i1: Static = STATIC("i1#415", 50), i2: Static = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + + /* static */ const f1: Static = STATIC("f1#421", 1.00), f2: Static = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + + { + /* static */ const i1: Static = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); ShowHelpMarker("CTRL+click to input value."); + + /* static */ const f1: Static = STATIC("f1#427", 0.123), f2: Static = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle: Static = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + + /* static */ const col1: Static> = STATIC>("col1", [ 1.0,0.0,0.2 ]); + /* static */ const col2: Static> = STATIC>("col2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + + ImGui.ColorEdit4("color 2", col2.value); + + const listbox_items: string[] = [ "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" ]; + /* static */ const listbox_item_current: Static = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + + /* static */ const listbox_item_current2: Static = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Trees")) + { + if (ImGui.TreeNode("Basic trees")) + { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) + { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Advanced, with Selectable nodes")) + { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position: Static = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + + /* static */ const selection_mask: Static = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked: number = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(ImGuiStyleVar.IndentSpacing, ImGui.GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) + { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.OpenOnDoubleClick | ((selection_mask.value & (1 << i)) ? ImGuiTreeNodeFlags.Selected : 0); + if (i < 3) + { + // Node + const node_open: boolean = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.NoTreePushOnOpen; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) + { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Collapsing Headers")) + { + /* static */ const closable_group: Static = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Bullets")) + { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text")) + { + if (ImGui.TreeNode("Colored Text")) + { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new ImVec4(1.0,0.0,1.0,1.0), "Pink"); + ImGui.TextColored(new ImVec4(1.0,1.0,0.0,1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Word Wrapping")) + { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + + /* static */ const wrap_width: Static = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + + ImGui.Text("Test paragraph 1:"); + let pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("UTF-8 Text")) + { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf: Static = STATIC("buf", new ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Images")) + { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io: ImGuiIO = ImGui.GetIO(); + + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id: WebGLTexture | null = io.Fonts.TexID; + const my_tex_w: number = io.Fonts.TexWidth; + const my_tex_h: number = io.Fonts.TexHeight; + + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new ImVec2(my_tex_w, my_tex_h), new ImVec2(0,0), new ImVec2(1,1), new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + const focus_sz: number = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; if (focus_x < 0.0) focus_x = 0.0; else if (focus_x > my_tex_w - focus_sz) focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; if (focus_y < 0.0) focus_y = 0.0; else if (focus_y > my_tex_h - focus_sz) focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0: ImVec2 = new ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1: ImVec2 = new ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new ImVec2(128,128), uv0, uv1, new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count: Static = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); + let frame_padding: number = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new ImVec2(32,32), new ImVec2(0,0), new ImVec2(32.0/my_tex_w,32/my_tex_h), frame_padding, new ImVec4(0,0,0,1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Selectables")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const selected: Static = STATIC("selected#672", [ false, true, false, false ]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], ImGuiSelectableFlags.AllowDoubleClick)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) + { + /* static */ const selected: Static = STATIC("selected#687", [ false, false, false ]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); ImGui.SameLine(300); ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) + { + ImGui.Columns(3, null, false); + /* static */ const selected: Static = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) + { + const label: string = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) + { + /* static */ const selected: Static = STATIC("selected#712", [ true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true ]); + for (let i = 0; i < 16; i++) + { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new ImVec2(50,50))) + { + let x: number = i % 4, y: number = i / 4; + if (x > 0) selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Filtered Text Input")) + { + /* static */ const buf1: Static = STATIC("buf1", new ImStringBuffer(64, "")); ImGui.InputText("default", buf1.value, IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2: Static = STATIC("buf2", new ImStringBuffer(64, "")); ImGui.InputText("decimal", buf2.value, IM_ARRAYSIZE(buf2.value), ImGuiInputTextFlags.CharsDecimal); + /* static */ const buf3: Static = STATIC("buf3", new ImStringBuffer(64, "")); ImGui.InputText("hexadecimal", buf3.value, IM_ARRAYSIZE(buf3.value), ImGuiInputTextFlags.CharsHexadecimal | ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf4: Static = STATIC("buf4", new ImStringBuffer(64, "")); ImGui.InputText("uppercase", buf4.value, IM_ARRAYSIZE(buf4.value), ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf5: Static = STATIC("buf5", new ImStringBuffer(64, "")); ImGui.InputText("no blank", buf5.value, IM_ARRAYSIZE(buf5.value), ImGuiInputTextFlags.CharsNoBlank); + class TextFilters { public static FilterImGuiLetters(data: ImGuiTextEditCallbackData): number { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) return 0; return 1; } } + /* static */ const buf6: Static = STATIC("buf6", new ImStringBuffer(64, "")); ImGui.InputText("\"imgui\" letters", buf6.value, IM_ARRAYSIZE(buf6.value), ImGuiInputTextFlags.CallbackCharFilter, TextFilters.FilterImGuiLetters); + + ImGui.Text("Password input"); + /* static */ const bufpass: Static = STATIC("bufpass", new ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.Password | ImGuiInputTextFlags.CharsNoBlank); + ImGui.SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.CharsNoBlank); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-line Text Input")) + { + /* static */ const read_only: Static = STATIC("read_only", false); + /* static */ const text: Static = STATIC("text", new ImStringBuffer(1024*16, + "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, IM_ARRAYSIZE(text.value), new ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), ImGuiInputTextFlags.AllowTabInput | (read_only.value ? ImGuiInputTextFlags.ReadOnly : 0)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Plots widgets")) + { + /* static */ const animate: Static = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + + /* static */ const arr: Static = STATIC("arr", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + ImGui.PlotLines_Array("Frame Times", arr.value, IM_ARRAYSIZE(arr.value)); + + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values: Static = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset: Static = STATIC("values_offset", 0); + /* static */ const refresh_time: Static = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) // Create dummy data at fixed 60 hz rate for the demo + { + /* static */ const phase: Static = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value+1) % IM_ARRAYSIZE(values.value); + phase.value += 0.10*values_offset.value; + refresh_time.value += 1.0/60.0; + } + ImGui.PlotLines_Array("Lines", values.value, IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new ImVec2(0,80)); + + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs + { + public static Sin(data: any, i: number): number { return Math.sin(i * 0.1); } + public static Saw(data: any, i: number): number { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type: Static = STATIC("func_type", 0), display_count: Static = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func: (data: any, i: number) => number = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.Separator(); + + // Animate a simple progress bar + /* static */ const progress: Static = STATIC("progress", 0.0), progress_dir: Static = STATIC("progress_dir", 1.0); + if (animate.value) + { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { progress.value = +1.1; progress_dir.value *= -1.0; } + if (progress.value <= -0.1) { progress.value = -0.1; progress_dir.value *= -1.0; } + } + + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new ImVec2(0.0,0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + + const progress_saturated: number = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf: string = `${(progress_saturated*1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new ImVec2(0.,0.), buf); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Color/Picker Widgets")) + { + /* static */ const color: Static = STATIC("color#863", new ImColor(114, 144, 154, 200).toImVec4()); + + /* static */ const hdr: Static = STATIC("hdr", false); + /* static */ const alpha_preview: Static = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview: Static = STATIC("alpha_half_preview", false); + /* static */ const options_menu: Static = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); ImGui.SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); ImGui.SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags: ImGuiColorEditFlags = (hdr.value ? ImGuiColorEditFlags.HDR : 0) | (alpha_half_preview.value ? ImGuiColorEditFlags.AlphaPreviewHalf : (alpha_preview.value ? ImGuiColorEditFlags.AlphaPreview : 0)) | (options_menu.value ? 0 : ImGuiColorEditFlags.NoOptions); + + ImGui.Text("Color widget:"); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, ImGuiColorEditFlags.HSV | misc_flags); + + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, ImGuiColorEditFlags.Float | misc_flags); + + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoLabel | misc_flags); + + ImGui.Text("Color button with Custom Picker Popup:"); + + // Generate a dummy palette + /* static */ const saved_palette_inited: Static = STATIC("saved_palette_inited", false); + /* static */ const saved_palette: Static = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) + { + saved_palette.value[n] = new ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r: ImScalar = [ 0.0 ]; + const g: ImScalar = [ 0.0 ]; + const b: ImScalar = [ 0.0 ]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + + /* static */ const backup_color: Static = STATIC("backup_color", new ImVec4()); + let open_popup: boolean = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) + { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) + { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < IM_ARRAYSIZE(saved_palette.value); n++) + { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], ImGuiColorEditFlags.NoAlpha | ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.NoTooltip, new ImVec2(20,20))) + color.value.Copy(new ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + + if (ImGui.BeginDragDropTarget()) + { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new ImVec2(80,80)); + + ImGui.Text("Color picker:"); + /* static */ const alpha: Static = STATIC("alpha", true); + /* static */ const alpha_bar: Static = STATIC("alpha_bar", true); + /* static */ const side_preview: Static = STATIC("side_preview", true); + /* static */ const ref_color: Static = STATIC("ref_color", false); + /* static */ const ref_color_v: Static = STATIC("ref_color_v", new ImVec4(1.0,0.0,1.0,0.5)); + /* static */ const inputs_mode: Static = STATIC("inputs_mode", 2); + /* static */ const picker_mode: Static = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) + { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) + { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, ImGuiColorEditFlags.NoInputs | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); ShowHelpMarker("User can right-click the picker to change mode."); + let flags: ImGuiColorEditFlags = misc_flags; + if (!alpha.value) flags |= ImGuiColorEditFlags.NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) flags |= ImGuiColorEditFlags.AlphaBar; + if (!side_preview.value) flags |= ImGuiColorEditFlags.NoSidePreview; + if (picker_mode.value === 1) flags |= ImGuiColorEditFlags.PickerHueBar; + if (picker_mode.value === 2) flags |= ImGuiColorEditFlags.PickerHueWheel; + if (inputs_mode.value === 1) flags |= ImGuiColorEditFlags.NoInputs; + if (inputs_mode.value === 2) flags |= ImGuiColorEditFlags.RGB; + if (inputs_mode.value === 3) flags |= ImGuiColorEditFlags.HSV; + if (inputs_mode.value === 4) flags |= ImGuiColorEditFlags.HEX; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Uint8 | ImGuiColorEditFlags.HSV); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Float | ImGuiColorEditFlags.RGB); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Range Widgets")) + { + /* static */ const begin: Static = STATIC("begin", 10), end: Static = STATIC("end", 90); + /* static */ const begin_i: Static = STATIC("begin_i", 100), end_i: Static = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-component Widgets")) + { + /* static */ const vec4f: Static> = STATIC>("vec4f", [ 0.10, 0.20, 0.30, 0.44 ]); + /* static */ const vec4i: Static> = STATIC>("vec4i", [ 1, 5, 100, 255 ]); + + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Vertical Sliders")) + { + const spacing: number = 4; + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(spacing, spacing)); + + /* static */ const int_value: Static = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new ImVec2(18,160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + + /* static */ const values: Static = STATIC("values#1072", [ 0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0 ]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.FrameBg, ImColor.HSV(i/7.0, 0.5, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, ImColor.HSV(i/7.0, 0.6, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgActive, ImColor.HSV(i/7.0, 0.7, 0.5)); + ImGui.PushStyleColor(ImGuiCol.SliderGrab, ImColor.HSV(i/7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new ImVec2(18,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2: Static = STATIC("values2", [ 0.20, 0.80, 0.40, 0.25 ]); + const rows: number = 3; + const small_slider_size: Readonly = new ImVec2(18, (160.0-(rows-1)*spacing)/rows); + for (let nx = 0; nx < 4; nx++) + { + if (nx > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) + { + ImGui.PushID(nx*rows+ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(ImGuiStyleVar.GrabMinSize, 40); + ImGui.VSliderFloat("##v", new ImVec2(40,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Layout")) + { + if (ImGui.TreeNode("Child regions")) + { + /* static */ const disable_mouse_wheel: Static = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + + ImGui.Text("Without border"); + /* static */ const line: Static = STATIC("line", 50); + let goto_line: boolean = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, ImGuiInputTextFlags.EnterReturnsTrue) || goto_line; + ImGui.PopItemWidth(); + + ImGui.BeginChild("Sub1", new ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5,300), false, ImGuiWindowFlags.HorizontalScrollbar | (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + for (let i = 0; i < 100; i++) + { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + + ImGui.SameLine(); + + ImGui.PushStyleVar(ImGuiStyleVar.ChildRounding, 5.0); + ImGui.BeginChild("Sub2", new ImVec2(0,300), true, (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) + { + if (i === 50) + ImGui.NextColumn(); + const buf: string = `${("00000000" + (i*5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Widgets Width")) + { + /* static */ const f: Static = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Basic Horizontal Layout")) + { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + + // Text + ImGui.Text("Two items: Hello"); ImGui.SameLine(); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Adjust spacing + ImGui.Text("More spacing: Hello"); ImGui.SameLine(0, 20); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); ImGui.SameLine(); + ImGui.Button("Banana"); ImGui.SameLine(); + ImGui.Button("Apple"); ImGui.SameLine(); + ImGui.Button("Corniflower"); + + // Button + ImGui.Text("Small buttons"); ImGui.SameLine(); + ImGui.SmallButton("Like this one"); ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.Text("x=150"); + ImGui.SameLine(300); ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.SmallButton("x=150"); + ImGui.SameLine(300); ImGui.SmallButton("x=300"); + + // Checkbox + /* static */ const c1: Static=STATIC("c1", false),c2: Static=STATIC("c2", false),c3: Static=STATIC("c3", false),c4: Static=STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + + // Various + /* static */ const f0: Static=STATIC("f0#1255", 1.0), f1: Static=STATIC("f1#1255", 2.0), f2: Static=STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD" ]; + /* static */ const item: Static = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, IM_ARRAYSIZE(items)); ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0,5.0); + ImGui.PopItemWidth(); + + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection: Static = STATIC("selection", [ 0, 1, 2, 3 ]); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + + // Dummy + const sz: Readonly = new ImVec2(30,30); + ImGui.Button("A", sz); ImGui.SameLine(); + ImGui.Dummy(sz); ImGui.SameLine(); + ImGui.Button("B", sz); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Groups")) + { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size: ImVec2 = ImGui.GetItemRectSize(); + const values: number[/*5*/] = [ 0.5, 0.20, 0.80, 0.60, 0.25 ]; + ImGui.PlotHistogram_Array("##values", values, IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + + ImGui.Button("ACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text Baseline Alignment")) + { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + + ImGui.Text("One\nTwo\nThree"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + + ImGui.Button("HOP##1"); ImGui.SameLine(); + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("HOP##2"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("TEST##1"); ImGui.SameLine(); + ImGui.Text("TEST"); ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); ImGui.SameLine(); + ImGui.Button("Widget##1"); ImGui.SameLine(); + ImGui.Text("Widget"); ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); ImGui.SameLine(); + ImGui.Button("Widget##3"); + + // Tree + const spacing: number = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open: boolean = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##2"); + if (node_open) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##4"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Scrolling")) + { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track: Static = STATIC("track", true); + /* static */ const track_line: Static = STATIC("track_line", 50), scroll_to_px: Static = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to: boolean = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) track.value = false; + + for (let i = 0; i < 5; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) + { + if (track.value && line === track_line.value) + { + ImGui.TextColored(new ImColor(255,255,0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else + { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y: number = ImGui.GetScrollY(), scroll_max_y: number = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.Bullet(); ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines: Static = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 3.0); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new ImVec2(0, ImGui.GetFrameHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags.HorizontalScrollbar); + for (let line = 0; line < lines.value; line++) + { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons: number = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) + { + if (n > 0) ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf: string = n.toFixed(0); + const label: string = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; + const hue: number = n*0.05; + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x: number = ImGui.GetScrollX(), scroll_max_x: number = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta: number = 0.0; + ImGui.SmallButton("<<"); if (ImGui.IsItemActive()) scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text("Scroll from code"); ImGui.SameLine(); + ImGui.SmallButton(">>"); if (ImGui.IsItemActive()) scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) + { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Clipping")) + { + /* static */ const size: Static = STATIC("size", new ImVec2(100, 100)), offset: Static = STATIC("offset", new ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos: Readonly = ImGui.GetCursorScreenPos(); + const clip_rect: Readonly = new ImVec4(pos.x, pos.y, pos.x+size.value.x, pos.y+size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { offset.value.x += ImGui.GetIO().MouseDelta.x; offset.value.y += ImGui.GetIO().MouseDelta.y; } + ImGui.GetWindowDrawList().AddRectFilled(pos, new ImVec2(pos.x+size.value.x,pos.y+size.value.y), IM_COL32(90,90,120,255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize()*2.0, new ImVec2(pos.x+offset.value.x,pos.y+offset.value.y), IM_COL32(255,255,255,255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Popups & Modal windows")) + { + if (ImGui.TreeNode("Popups")) + { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + + /* static */ const selected_fish: Static = STATIC("selected_fish", -1); + const names: string[] = [ "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" ]; + /* static */ const toggles: Static = STATIC("toggles", [ true, false, false, false, false ]); + + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) + { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) + { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Context menus")) + { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value: Static = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) + { + if (ImGui.Selectable("Set to zero")) value.value = 0.0; + if (ImGui.Selectable("Set to PI")) value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + + /* static */ const name: Static = STATIC("name", new ImStringBuffer(32, "Label1")); + const buf: string = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). + { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); ImGui.Text("(<-- right-click here)"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Modals")) + { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, ImGuiWindowFlags.AlwaysAutoResize)) + { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + + /* static */ const dont_ask_me_next_time: Static = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + + if (ImGui.Button("OK", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.EndPopup(); + } + + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) + { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item: Static = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color: Static> = STATIC>("color#2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) + { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Menus inside a regular window")) + { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Columns")) + { + ImGui.PushID("Columns"); + + // Basic columns + if (ImGui.TreeNode("Basic")) + { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) + { + const label: string = `Item ${n}`; + if (ImGui.Selectable(label)) {} + if (ImGui.Button(label, new ImVec2(-1,0))) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Text("Hovered"); ImGui.NextColumn(); + ImGui.Separator(); + const names: string[/*3*/] = [ "One", "Two", "Three" ]; + const paths: string[/*3*/] = [ "/path/one", "/path/two", "/path/three" ]; + /* static */ const selected: Static = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) + { + const label: string = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, ImGuiSelectableFlags.SpanAllColumns)) + selected.value = i; + const hovered: boolean = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); ImGui.NextColumn(); + ImGui.Text(paths[i]); ImGui.NextColumn(); + ImGui.Text(`${hovered}`); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) + { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo: Static = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar: Static = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + + if (ImGui.CollapsingHeader("Category A")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) + { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Borders")) + { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders: Static = STATIC("h_borders", true); + /* static */ const v_borders: Static = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4*3; i++) + { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c: string = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.SetNextWindowContentSize(new ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new ImVec2(0, ImGui.GetFontSize() * 20), false, ImGuiWindowFlags.HorizontalScrollbar); + ImGui.Columns(10); + const ITEMS_COUNT: number = 2000; + const clipper: ImGuiListClipper = new ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) + { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) + { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + + const node_open: boolean = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) + { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { ImGui.BulletText("Sailor"); ImGui.TreePop(); } ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { ImGui.BulletText("Marin"); ImGui.TreePop(); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + + if (ImGui.CollapsingHeader("Filtering")) + { + /* static */ const filter: Static = STATIC("filter#1864", new ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines: string[] = [ "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" ]; + for (let i = 0; i < IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + + if (ImGui.CollapsingHeader("Inputs & Focus")) + { + const io: ImGuiIO = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + + if (ImGui.TreeNode("Keyboard & Mouse State")) + { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Mouse clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse dbl-clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseDoubleClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse released:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseReleased(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + + ImGui.Text("Keys down:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Keys pressed:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyPressed(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text("Keys release:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyReleased(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Tabbing")) + { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf: Static = STATIC("buf1#1921", new ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focus from code")) + { + const focus_1: boolean = ImGui.Button("Focus on 1"); ImGui.SameLine(); + const focus_2: boolean = ImGui.Button("Focus on 2"); ImGui.SameLine(); + const focus_3: boolean = ImGui.Button("Focus on 3"); + let has_focus: number = 0; + /* static */ const buf: Static = STATIC("buf2#1944", new ImStringBuffer(128, "click on a button to set focus")); + + if (focus_1) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 1; + + if (focus_2) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 2; + + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focused & Hovered Test")) + { + /* static */ const embed_all_inside_a_child_window: Static = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new ImVec2(0, ImGui.GetFontSize() * 25), true); + + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows | ImGuiFocusedFlags.RootWindow)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.RootWindow)}\n`); + + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows | ImGuiHoveredFlags.RootWindow)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow)}\n"`); + + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText( + `IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenOverlapped)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.RectOnly)}\n`); + + ImGui.BeginChild("child", new ImVec2(0,50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Dragging")) + { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) + { + // Draw a line between the button and the mouse cursor + const draw_list: ImGui.ImDrawList = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[ImGuiCol.Button]), 4.0); + draw_list.PopClipRect(); + + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw: Readonly = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold: Readonly = ImGui.GetMouseDragDelta(0); + const mouse_delta: Readonly = io.MouseDelta; + ImGui.SameLine(); ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Mouse cursors")) + { + const mouse_cursors_names: string[] = [ "Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE" ]; + IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) === ImGuiMouseCursor.COUNT); + + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < ImGuiMouseCursor.COUNT; i++) + { + const label: string = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + + ImGui.End(); +} + +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +export function ShowStyleSelector(label: string): boolean +{ + /* static */ const style_idx: Static = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) + { + switch (style_idx.value) + { + case 0: ImGui.StyleColorsClassic(); break; + case 1: ImGui.StyleColorsDark(); break; + case 2: ImGui.StyleColorsLight(); break; + } + return true; + } + return false; +} + +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +export function ShowFontSelector(label: string): void +{ + const io: ImGuiIO = ImGui.GetIO(); + const font_current: ImFont = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) + { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker( + "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} + +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void +{ + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style: ImGuiStyle = ImGui.GetStyle(); + /* static */ const ref_saved_style: Static = STATIC("ref_saved_style", new ImGuiStyle()); + + // Default to using internal storage as reference + /* static */ const init: Static = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + + if (/*ImGui.*/ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ShowFontSelector("Fonts##Selector"); + + + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { let window_border: boolean = (style.WindowBorderSize > 0.0); if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) style.WindowBorderSize = window_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let frame_border: boolean = (style.FrameBorderSize > 0.0); if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) style.FrameBorderSize = frame_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let popup_border: boolean = (style.PopupBorderSize > 0.0); if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) style.PopupBorderSize = popup_border ? 1.0 : 0.0; } + + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + + if (ImGui.TreeNode("Rendering")) + { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); ImGui.SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Settings")) + { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); ImGui.SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Colors")) + { + /* static */ const output_dest: Static = STATIC("output_dest", 0); + /* static */ const output_only_modified: Static = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) + { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const col: Readonly = style.Colors[i]; + const name: string = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); ImGui.PushItemWidth(120); ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + + /* static */ const filter: Static = STATIC("filter#2223", new ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + + /* static */ const alpha_flags: Static = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreview); ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreviewHalf); + + ImGui.BeginChild("#colors", new ImVec2(0, 300), true, ImGuiWindowFlags.AlwaysVerticalScrollbar | ImGuiWindowFlags.AlwaysHorizontalScrollbar); + ImGui.PushItemWidth(-160); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], ImGuiColorEditFlags.AlphaBar | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) + { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Save")) ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Revert")) style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + + ImGui.TreePop(); + } + + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened: boolean = ImGui.TreeNode("Fonts"); + if (fonts_opened) + { + const atlas: ImFontAtlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) + { + ImGui.Image(atlas.TexID, new ImVec2(atlas.TexWidth, atlas.TexHeight), new ImVec2(0,0), new ImVec2(1,1), new ImColor(255,255,255,255).Value, new ImColor(255,255,255,128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale: Static = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + + ImGui.PopItemWidth(); +} + +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar(): void +{ + if (ImGui.BeginMainMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) + { + if (ImGui.MenuItem("Undo", "CTRL+Z")) {} + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) {} + if (ImGui.MenuItem("Copy", "CTRL+C")) {} + if (ImGui.MenuItem("Paste", "CTRL+V")) {} + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} + +function ShowExampleMenuFile(): void +{ + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) {} + if (ImGui.MenuItem("Open", "Ctrl+O")) {} + if (ImGui.BeginMenu("Open Recent")) + { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) + { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) {} + if (ImGui.MenuItem("Save As..")) {} + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) + { + /* static */ const enabled: Static = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f: Static = STATIC("f#2408", 0.5); + /* static */ const n: Static = STATIC("n", 0); + /* static */ const b: Static = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) + { + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i as ImGuiCol); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i as ImGuiCol)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) // Disabled + { + IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) {} + if (ImGui.MenuItem("Quit", "Alt+F4")) {} +} + +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open: ImAccess): void +{ + if (!ImGui.Begin("Example: Auto-resizing window", p_open, ImGui.WindowFlags.AlwaysAutoResize)) + { + ImGui.End(); + return; + } + + /* static */ const lines: Static = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} + +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open: ImAccess): void +{ + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + public static Square(data: ImGuiSizeConstraintCallbackData): void { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + public static Step(data: ImGuiSizeConstraintCallbackData): void { + const step: number = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + + /* static */ const auto_resize: Static = STATIC("auto_resize", false); + /* static */ const type: Static = STATIC("type", 0); + /* static */ const display_lines: Static = STATIC("display_lines", 10); + if (type.value === 0) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 0), new ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, -1), new ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) ImGui.SetNextWindowSizeConstraints(new ImVec2(100, 100), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) ImGui.SetNextWindowSizeConstraints(new ImVec2(400, -1), new ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 400), new ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100);// Fixed Step + + const flags: ImGuiWindowFlags = auto_resize.value ? ImGuiWindowFlags.AlwaysAutoResize : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) + { + const desc: string[] = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { ImGui.SetWindowSize(new ImVec2(200, 200)); } ImGui.SameLine(); + if (ImGui.Button("500x500")) { ImGui.SetWindowSize(new ImVec2(500, 500)); } ImGui.SameLine(); + if (ImGui.Button("800x200")) { ImGui.SetWindowSize(new ImVec2(800, 200)); } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} + +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open: ImAccess): void +{ + const DISTANCE: number = 10.0; + /* static */ const corner: Static = STATIC("corner", 0); + const window_pos: Readonly = new ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot: Readonly = new ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, ImGuiCond.Always, window_pos_pivot); + ImGui.PushStyleColor(ImGuiCol.WindowBg, new ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags.NoTitleBar|ImGuiWindowFlags.NoResize|ImGuiWindowFlags.AlwaysAutoResize|ImGuiWindowFlags.NoMove|ImGuiWindowFlags.NoSavedSettings)) + { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} + +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open: ImAccess): void +{ + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new ImVec2(100,100), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + + ImGui.SetNextWindowPos(new ImVec2(100,200), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf: string = `Animated title ${"|/-\\".charAt((ImGui.GetTime()/0.25)&3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new ImVec2(100,300), ImGuiCond.FirstUseEver); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} + +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(350,560), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Custom rendering", p_open)) + { + ImGui.End(); + return; + } + + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz: Static = STATIC("sz", 36.0); + /* static */ const col: Static = STATIC("color#2583", new ImVec4(1.0,1.0,0.4,1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value) + { + const p: Readonly = ImGui.GetCursorScreenPos(); + const col32: ImU32 = IM_COL32(col.value.x*255, col.value.y*255, col.value.z*255, col.value.w*255); + let x: number = p.x + 4.0, y: number = p.y + 4.0, spacing: number = 8.0; + for (let n = 0; n < 2; n++) + { + const thickness: number = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 20, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 0.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight, thickness); x += sz.value+spacing; + draw_list.AddTriangle(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y ), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x, y+sz.value), col32, thickness); x += spacing; + draw_list.AddBezierCurve(new ImVec2(x, y), new ImVec2(x+sz.value*1.3,y+sz.value*0.3), new ImVec2(x+sz.value-sz.value*1.3,y+sz.value-sz.value*0.3), new ImVec2(x+sz.value, y+sz.value), col32, thickness); + x = p.x + 4; + y += sz.value+spacing; + } + draw_list.AddCircleFilled(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight); x += sz.value+spacing; + draw_list.AddTriangleFilled(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32); x += sz.value+spacing; + draw_list.AddRectFilledMultiColor(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), IM_COL32(0,0,0), IM_COL32(255,0,0), IM_COL32(255,255,0), IM_COL32(0,255,0)); + ImGui.Dummy(new ImVec2((sz.value+spacing)*8, (sz.value+spacing)*3)); + } + ImGui.Separator(); + { + /* static */ const points: Static> = STATIC("points", new ImVector()); + /* static */ const adding_line: Static = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) points.value.clear(); + if (points.value.Size >= 2) { ImGui.SameLine(); if (ImGui.Button("Undo")) { points.value.pop_back(); points.value.pop_back(); } } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos: ImVec2 = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size: ImVec2 = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) canvas_size.x = 50.0; + if (canvas_size.y < 50.0) canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50,50,50), IM_COL32(50,50,60), IM_COL32(60,60,70), IM_COL32(50,50,60)); + draw_list.AddRect(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255,255,255)); + + let adding_preview: boolean = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas: ImVec2 = new ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) + { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) + { + if (!adding_line.value && ImGui.IsMouseClicked(0)) + { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) + { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new ImVec2(canvas_pos.x + points.value.Data[i+1].x, canvas_pos.y + points.value.Data[i+1].y), IM_COL32(255,255,0,255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} + +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256, ""); + // ImVector Items; + Items: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + // ImVector History; + History: ImVector = new ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + HistoryPos: number = -1; + // ImVector Commands; + Commands: ImVector = new ImVector(); + + constructor() { + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + + delete(): void {} + + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + + ClearLog(): void { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + + // void Draw(const char* title, bool* p_open) + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin(title, p_open)) + { + ImGui.End(); + return; + } + + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) + { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + + // TODO: display items starting from the bottom + + if (ImGui.SmallButton("Add Dummy Text")) { this.AddLog(`${this.Items.Size} some text`); this.AddLog("some more text"); this.AddLog("display very important message here!"); } ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { this.AddLog("[error] something went wrong"); } ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { this.ClearLog(); } ImGui.SameLine(); + const copy_to_clipboard: boolean = ImGui.SmallButton("Copy"); ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + + ImGui.Separator(); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + /* static */ const filter: Static = STATIC("filter#2763", new ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + + const footer_height_to_reserve: number = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags.HorizontalScrollbar); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.Selectable("Clear")) this.ClearLog(); + ImGui.EndPopup(); + } + + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(4,1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) + { + // const char* item = Items[i]; + const item: string = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col: ImVec4 = new ImVec4(1.0,1.0,1.0,1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) col = new ImVec4(1.0,0.4,0.4,1.0); + // else if (strncmp(item, "# ", 2) === 0) col = ImColor(1.0f,0.78f,0.58f,1.0f); + else if (/^# /.test(item)) col = new ImVec4(1.0,0.78,0.58,1.0); + ImGui.PushStyleColor(ImGuiCol.Text, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + + // Command-line + if (ImGui.InputText("Input", this.InputBuf, IM_ARRAYSIZE(this.InputBuf), ImGuiInputTextFlags.EnterReturnsTrue|ImGuiInputTextFlags.CallbackCompletion|ImGuiInputTextFlags.CallbackHistory, ExampleAppConsole.TextEditCallbackStub, this)) + { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(ImGuiFocusedFlags.RootAndChildWindows) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + + ImGui.End(); + } + + // void ExecCommand(const char* command_line) + ExecCommand(command_line: string): void + { + this.AddLog(`# ${command_line}\n`); + + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size-1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) + { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") + { + this.ClearLog(); + } + // else if (Stricmp(command_line, "HELP") === 0) + else if (command_line.toUpperCase() === "HELP") + { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + // else if (Stricmp(command_line, "HISTORY") === 0) + else if (command_line.toUpperCase() === "HISTORY") + { + const first: number = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else + { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data: ImGuiTextEditCallbackData): number + { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console: ExampleAppConsole = data.UserData as ExampleAppConsole; + return console.TextEditCallback(data); + } + + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data: ImGuiTextEditCallbackData): number + { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) + { + case ImGuiInputTextFlags.CallbackCompletion: + { + // Example of TEXT COMPLETION + + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + + break; + } + case ImGuiInputTextFlags.CallbackHistory: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} + +function ShowExampleAppConsole(p_open: ImAccess): void +{ + /* static */ const console: Static = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} + +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog +{ + // ImGuiTextBuffer Buf; + Buf: ImGuiTextBuffer = new ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + Filter: ImGuiTextFilter = new ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + LineOffsets: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear(): void { this.Buf.clear(); this.LineOffsets.clear(); } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void + { + let old_size: number = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(500,400), ImGuiCond.FirstUseEver); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) this.Clear(); + ImGui.SameLine(); + const copy: boolean = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new ImVec2(0,0), false, ImGuiWindowFlags.HorizontalScrollbar); + if (copy) ImGui.LogToClipboard(); + + if (this.Filter.IsActive()) + { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else + { + ImGui.TextUnformatted(this.Buf.begin()); + } + + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} + +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open: ImAccess): void +{ + /* static */ const log: Static = STATIC("log#3073", new ExampleAppLog()); + + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time: Static = STATIC("last_time", -1.0); + const time: number = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) + { + const random_words: string[] = [ "system", "info", "warning", "error", "fatal", "notice", "log" ]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + + log.value.Draw("Example: Log", p_open); +} + +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(500, 440), ImGuiCond.FirstUseEver); + if (ImGui.Begin("Example: Layout", p_open, ImGuiWindowFlags.MenuBar)) + { + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + if (ImGui.MenuItem("Close")) p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + // left + /* static */ const selected: Static = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) + { + const label: string = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) {} + ImGui.SameLine(); + if (ImGui.Button("Save")) {} + ImGui.EndGroup(); + } + ImGui.End(); +} + +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(430,450), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Property editor", p_open)) + { + ImGui.End(); + return; + } + + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2,2)); + ImGui.Columns(2); + ImGui.Separator(); + + class funcs + { + static ShowDummyObject(prefix: string, uid: number): void + { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open: boolean = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) + { + /* static */ const dummy_members: Static = STATIC("dummy_members", [ 0.0,0.0,1.0,3.1416,100.0,999.0 ]); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) + { + funcs.ShowDummyObject("Child", 424242); + } + else + { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label: string = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref: ImScalar = [ dummy_members.value[i] || 0 ]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} + +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Long text display", p_open)) + { + ImGui.End(); + return; + } + + /* static */ const test_type: Static = STATIC("test_type", 0); + /* static */ const log: Static = STATIC("log#3217", new ImGuiTextBuffer()); + /* static */ const lines: Static = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { log.value.clear(); lines.value = 0; } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) + { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value+i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) + { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + const clipper: ImGuiListClipper = new ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} + +// End of Demo code +// #else + +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} + +// #endif diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,bBIAANyFAAAIAAAAGAAAAAASAADshQAAiBIAAPuFAAAAAAAAAQAAADgAAAAAAAAAABIAADqGAAAAEgAAZ4YAAAASAACjhgAAABIAAK+GAABsEgAAzYYAAAgAAABoAAAAABIAAOWGAABsEgAA/IYAAAAAAACAAAAAABIAAAqHAABsEgAAG4cAAAAAAACYAAAAABIAACmHAABsEgAA6ogAAAAAAACwAAAAABIAAAeJAABsEgAAcYkAAAAAAADIAAAAABIAAHqJAABsEgAAgokAAAEAAABIAAAAbBIAAJGKAAAAAAAA8AAAAAASAAC0igAAbBIAAOCKAAAAAAAACAEAAAASAADuigAAbBIAAPuKAAAAAAAAIAEAAAASAAAFiwAAbBIAABGNAAAAAAAASAAAAGwSAAAajQAAAAAAAFAAAABsEgAAJY0AAAEAAACYAAAAbBIAAMCOAAABAAAAIAEAAGwSAADLjgAAAAAAAHgBAAAAEgAA2o4AAGwSAAAsjwAAAQAAAHgBAAAAEgAAUI8AAGwSAACNjwAAAQAAAMgAAABsEgAA8o8AAAEAAAAIAQAAbBIAAAGQAAABAAAAgAAAAAASAABmkQAAbBIAAKKRAAABAAAA4AEAAAASAACvkQAAbBIAAOSRAAAAAAAA4AEAAGwSAABGkgAAAAAAAAgCAAAAEgAAWpIAAGwSAABzkgAAAQAAAAgCAABsEgAAzZIAAAEAAABQAAAAbBIAANeSAAABAAAA8AAAAGwSAAC2kwAAAQAAALAAAAAAEgAAZpYAAAASAACllgAAABIAAOOWAAAAEgAAKZcAAAASAABmlwAAABIAAIWXAAAAEgAApJcAAAASAADDlwAAABIAAOKXAAAAEgAAAZgAAIgSAAA+mAAAAAAAAAEAAAA4AAAAAAAAAIgSAAB9mAAAAAAAAAEAAAA4AAAAAAAAAAASAABDpAAAKBIAAKOkAADoAgAAAAAAACgSAABQpAAA+AIAAAAAAAAAEgAAcaQAACgSAAB+pAAA2AIAAAAAAAAoEgAAqaUAAOgCAAAAAAAAKBIAAIWlAAAQAwAAAAAAACgSAADLpQAA6AIAAAAAAABQEgAA86UAAGwSAAD1pQAAAAAAAEADAABQEgAA+KUAAFASAAD7pQAAUBIAAP2lAABQEgAA/6UAAFASAAABpgAAUBIAAAOmAABQEgAABaYAAFASAAAHpgAAUBIAAAmmAABQEgAAC6YAAFASAAANpgAAUBIAAA+mAABQEgAAEaYAACgSAAATpgAA2AIAAAAAAADkpgAAlCQAAJgkAACcJAAAoCQAAKQkAACkJAAApCQAAKQkAACqJAAAsiQAALokAADCJAAAyiQAANIkAADaJAAAwiQAAOIkAADiJAAA4iQAAOIkAADoJAAA8CQAAPgkAAAAJQAACCUAABAlAAAYJQAAACUAAP8AAP///wD/AP8A/wD///8AAP///wD///8AAP8DAAAAAQAAAAAAAAACAAAAAQAAAAMAAAACAAAAAAAAAAEAAAAAAAAAAgAAAAQAAAABAAAADAAAAAEAAAAQAAAAAgAAABQAAAABAAAAJAAAAAEAAAAoAAAAAQAAACwAAAABAAAAMAAAAAIAAAA0AAAAAQAAADwAAAABAAAAQAAAAAIAAABEAAAAAgAAAEwAAAABAAAAXAAAAAEAAABsAAAAAgAAAHQAAAAAAIA/zczMPQrXIzxvEoM6F7fROKzFJze9N4Y1lb/WM3fMKzJfcIkwAAAAAAAAQEAAAEBBAACYQQAAAAAAAAAAAABQQQAAAAAAAOBAAACAQQAAgEAAAABBAAD4QQAAAAAAALhBAAC4QQAAMEEAADBBAACoQQAAAAAAABBBAAC4QQAAoEAAADBBAABcQgAAkEEAALhBAAAQQQAAMEEAAKBAAACSQgAAAAAAAIhBAACIQQAAEEEAABBBAABcQgAAAAAAAIhBAACIQQAAEEEAABBBCAAAACAAAABIAwAAQAAAAJgDAABAAAAAkAMAALADAABAAAAAYAMAAEAAAACwAwAAYAMAAEAAAABAAAAAYAMAAGADAACQAwAAsAMAAJADAACQAwAAsAMAALADAABgAwAAkAMAAGADAACQAwAAkAMAAEADAACwAwAAsAMAALADAABAAAAAQAAAAEAAAACYAwAASAAAAEAAAACYAwAAQAAAAGADAACYAwAAUAAAAJADAABAAwAAkAMAALADAABAAAAAQAAAAEAAAAAgAAAAQAAAAGADAACwAwAAQAAAAEAAAABAAAAAYAMAALADAABAAAAAIAAAAJADAABgAwAAQAAAAEAAAABgAwAAkAMAAEADAACIAAAAQAMAAEAAAABAAAAAYAMAAEAAAAAgAAAAkAMAAGADAAAgAAAAQAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAAQAIAAEADAACwAAAAkAMAACAAAABAAAAAQAMAAKAAAACQAwAAkAMAAEADAACwAAAAIAAAACAAAACwAAAAoAAAAEAAAABAAAAAQAAAACgBAACwAwAAsAMAALADAACwAwAAKAEAADgBAACwAwAAsAMAADgBAACQDgAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAD65AAAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAOAAAUDwAABQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAC6QAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAMADAADABAAAwAUAAMAGAADABwAAwAgAAMAJAADACgAAwAsAAMAMAADADQAAwA4AAMAPAADAEAAAwBEAAMASAADAEwAAwBQAAMAVAADAFgAAwBcAAMAYAADAGQAAwBoAAMAbAADAHAAAwB0AAMAeAADAHwAAwAAAALMBAADDAgAAwwMAAMMEAADDBQAAwwYAAMMHAADDCAAAwwkAAMMKAADDCwAAwwwAAMMNAADTDgAAww8AAMMAAAy7AQAMwwIADMMDAAzDBAAM0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QVfcIkA/wkvDwEAAAAAAAAA2AIAAAEAAAACAAAAAwAAAAQAAAAFAAAAAQAAAAEAAAABAAAAAAAAAAADAAABAAAABQAAAAMAAAAEAAAABQAAAAIAAAACAAAAAgAAAAAAAAAwAwAAAQAAAAYAAAADAAAABAAAAAYAAAAAAAAAIAMAAAEAAAAHAAAAAwAAAAQAAAAHAAAAAAAAAMADAAABAAAACAAAAAMAAAAEAAAABQAAAAMAAAADAAAAAwAAACAA/wAAAGltZ3VpLmluaQBpbWd1aV9sb2cudHh0AGZpbGVuYW1lICYmIGZpbGVfb3Blbl9tb2RlAGltZ3VpL2ltZ3VpLmNwcABJbUZpbGVMb2FkVG9NZW1vcnkAQ291bnQgPD0gKChpbnQpKHNpemVvZihQb3MpL3NpemVvZigqUG9zKSkpAFVwZGF0ZQBpdGVtc19oZWlnaHQgPiAwLjBmAERpc3BsYXlTdGFydCA+PSAwICYmIERpc3BsYXlFbmQgPj0gMAAjTU9WRQAoZmxhZ3MgJiAoSW1HdWlIb3ZlcmVkRmxhZ3NfUm9vdFdpbmRvdyB8IEltR3VpSG92ZXJlZEZsYWdzX0NoaWxkV2luZG93cykpID09IDAAZy5JTy5EZWx0YVRpbWUgPj0gMC4wZiAmJiAiTmVlZCBhIHBvc2l0aXZlIERlbHRhVGltZSAoemVybyBpcyB0b2xlcmF0ZWQgYnV0IHdpbGwgY2F1c2Ugc29tZSB0aW1pbmcgaXNzdWVzKSIAZy5JTy5EaXNwbGF5U2l6ZS54ID49IDAuMGYgJiYgZy5JTy5EaXNwbGF5U2l6ZS55ID49IDAuMGYgJiYgIkludmFsaWQgRGlzcGxheVNpemUgdmFsdWUiAGcuSU8uRm9udHMtPkZvbnRzLlNpemUgPiAwICYmICJGb250IEF0bGFzIG5vdCBjcmVhdGVkLiBEaWQgeW91IGNhbGwgaW8uRm9udHMtPkdldFRleERhdGFBc1JHQkEzMiAvIEdldFRleERhdGFBc0FscGhhOCA/IgBnLklPLkZvbnRzLT5Gb250c1swXS0+SXNMb2FkZWQoKSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQXNDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUFDLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDOztBQWpCc0IsV0FBSSxHQUFxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUMsV0FBSSxHQUFxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUMsYUFBTSxHQUFxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsYUFBTSxHQUFxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFKM0Usd0JBbUJDO0FBR0QsMkNBQWdEO0FBQXZDLHdDQUFBLGdCQUFnQixDQUFBO0FBRXpCO0lBVUksWUFBbUIsSUFBWSxHQUFHLEVBQVMsSUFBWSxHQUFHLEVBQVMsSUFBWSxHQUFHLEVBQVMsSUFBWSxHQUFHO1FBQXZGLE1BQUMsR0FBRCxDQUFDLENBQWM7UUFBUyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztRQUFTLE1BQUMsR0FBRCxDQUFDLENBQWM7SUFBRyxDQUFDO0lBRXZHLElBQUksQ0FBQyxLQUFzQztRQUM5QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQXNDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUN6QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUFDLENBQUM7UUFDekMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFBQyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7O0FBekJzQixXQUFJLEdBQXFCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFdBQUksR0FBcUIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEQsYUFBTSxHQUFxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxhQUFNLEdBQXFCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFELGFBQU0sR0FBcUIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUQsYUFBTSxHQUFxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxZQUFLLEdBQXFCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELFlBQUssR0FBcUIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFScEYsd0JBMkJDO0FBRUQsK0VBQStFO0FBQy9FLFVBQVU7QUFDViwrRUFBK0U7QUFFL0Usb01BQW9NO0FBQ3BNLHlMQUF5TDtBQUN6TDtJQUFBO1FBR1csU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUt0QixVQUFVO1FBQ1Ysb0NBQW9DO1FBQ3BDLHdDQUF3QztRQUN4QyxvQ0FBb0M7UUFFcEMsMENBQTBDO1FBQzFDLHdDQUF3QztRQUN4Qyw4Q0FBOEM7UUFFOUMsb0VBQW9FO1FBQ3BFLGtFQUFrRTtRQUVsRSxvRkFBb0Y7UUFDcEYsK0VBQStFO1FBQy9FLG1GQUFtRjtRQUVuRix1R0FBdUc7UUFDdkcsdUdBQXVHO1FBRXZHLHdJQUF3STtRQUN4SSwrRUFBK0U7UUFDL0UsK0VBQStFO1FBQy9FLHNGQUFzRjtRQUN0RixzRkFBc0Y7UUFDdEYsdUdBQXVHO1FBQ3ZHLHVHQUF1RztRQUN2Ryw4R0FBOEc7UUFDOUcsOEdBQThHO1FBQzlHLHlRQUF5UTtRQUV6USwrS0FBK0s7UUFFL0ssK0lBQStJO1FBQy9JLHVOQUF1TjtRQUN2Tix3REFBd0Q7UUFDeEQsSUFBSTtRQUNKLHFDQUFxQztRQUNyQyxrQkFBa0I7UUFDbEIsb0ZBQW9GO1FBQ3BGLGdCQUFnQjtRQUNoQiw0REFBNEQ7UUFDNUQsNEJBQTRCO1FBQzVCLHVCQUF1QjtRQUN2QiwrQkFBK0I7UUFDL0IsSUFBSTtRQUVKLDZJQUE2STtRQUM3SSwrRkFBK0Y7UUFDL0YscUhBQXFIO1FBRXJILG1RQUFtUTtRQUNuUSw2V0FBNlc7UUFDN1csK01BQStNO0lBQ25OLENBQUM7SUEzREcsSUFBVyxJQUFJLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUUvQyxLQUFLLEtBQWMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsS0FBSyxLQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsUUFBUSxLQUFvQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsU0FBUyxDQUFDLEtBQVEsSUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FzRDlEO0FBN0RELDRCQTZEQztBQUVELHlFQUF5RTtBQUN6RTtJQXdCSSx3RUFBd0U7SUFDeEUsWUFBWSxpQkFBeUIsRUFBRTtRQXZCdkMsbUJBQW1CO1FBQ25CLElBQUk7UUFDSixxQkFBcUI7UUFDckIscUJBQXFCO1FBRXJCLG9DQUFvQztRQUNwQyxvRUFBb0U7UUFDcEUsOENBQThDO1FBQzlDLDRDQUE0QztRQUM1Qyw0Q0FBNEM7UUFDNUMsd0NBQXdDO1FBQ3hDLHFFQUFxRTtRQUNyRSx1R0FBdUc7UUFDdkcsc0VBQXNFO1FBQ3RFLEtBQUs7UUFFTCxxQ0FBcUM7UUFDckMsYUFBUSxHQUFtQixJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCwrQkFBK0I7UUFDL0IsaUNBQWlDO1FBQ2pDLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFJbEIsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ25CLENBQUM7WUFDRywrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUNKLENBQUM7WUFDRyxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBQ0QsOEhBQThIO0lBQ3ZILElBQUksQ0FBQyxRQUFnQixtQkFBbUIsRUFBRSxRQUFnQixHQUFHO1FBQ2hFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sYUFBYSxHQUFZLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNUYsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQztZQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBQ0QsdUZBQXVGO0lBQ2hGLFVBQVUsQ0FBQyxJQUFZLEVBQUUsV0FBMEIsSUFBSTtRQUMxRCx1QkFBdUI7UUFDdkIsbUJBQW1CO1FBRW5CLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFFakIsMENBQTBDO1FBQzFDLElBQUk7UUFDSix1Q0FBdUM7UUFDdkMscUJBQXFCO1FBQ3JCLG9CQUFvQjtRQUNwQiw0QkFBNEI7UUFDNUIsUUFBUTtRQUNSLHNCQUFzQjtRQUN0Qix1RUFBdUU7UUFDdkUsNEJBQTRCO1FBQzVCLFFBQVE7UUFDUixXQUFXO1FBQ1gsUUFBUTtRQUNSLGtCQUFrQjtRQUNsQixxRUFBcUU7UUFDckUsMkJBQTJCO1FBQzNCLFFBQVE7UUFDUixJQUFJO1FBRUosa0JBQWtCO1FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFaEIsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsK0JBQStCO0lBQ3hCLEtBQUs7UUFDUixxQkFBcUI7UUFDckIsOERBQThEO1FBQzlELG1DQUFtQztRQUVuQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNuQiwwQ0FBMEM7UUFDMUMsSUFBSTtRQUNKLGdDQUFnQztRQUNoQyw4QkFBOEI7UUFDOUIsb0JBQW9CO1FBQ3BCLHFDQUFxQztRQUNyQywwQkFBMEI7UUFDMUIsSUFBSTtJQUNSLENBQUM7SUFDRCw0REFBNEQ7SUFDckQsS0FBSyxLQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakUsb0VBQW9FO0lBQzdELFFBQVEsS0FBYyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUMvQztBQXZHRCwwQ0F1R0M7QUFFRCxvREFBb0Q7QUFDcEQ7SUFBQTtRQUVJLDJCQUEyQjtRQUMzQixRQUFHLEdBQVcsRUFBRSxDQUFDO1FBTWpCLDRDQUE0QztRQUM1QyxnRUFBZ0U7UUFDaEUsNkRBQTZEO1FBQzdELHFJQUFxSTtRQUNySSw0REFBNEQ7UUFDNUQsd0RBQXdEO1FBQ3hELGlFQUFpRTtRQUNqRSx1RUFBdUU7UUFDdkUseURBQXlEO1FBQ3pELG1FQUFtRTtRQUNuRSw2RUFBNkU7SUFDakYsQ0FBQztJQWhCRyxLQUFLLEtBQWEsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLElBQUksS0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFDLEtBQUssS0FBVyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEMsTUFBTSxDQUFDLElBQVksSUFBVSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FhbkQ7QUFwQkQsMENBb0JDO0FBRUQsb0NBQW9DO0FBQ3BDLDJGQUEyRjtBQUMzRiwwRkFBMEY7QUFDMUYsbUlBQW1JO0FBQ25JLHdHQUF3RztBQUN4RywwSUFBMEk7QUFDMUksMElBQTBJO0FBQzFJLHFHQUFxRztBQUNyRztDQXVDQztBQXZDRCxvQ0F1Q0M7QUFFRCw0Q0FBNEM7QUFDNUM7Q0FtQkM7QUFuQkQsb0NBbUJDO0FBRUQsb0RBQW9EO0FBQ3ZDLFFBQUEsZ0JBQWdCLEdBQVcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSxRQUFBLGdCQUFnQixHQUFXLENBQUMsQ0FBQztBQUM3QixRQUFBLGdCQUFnQixHQUFXLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkUsUUFBQSxnQkFBZ0IsR0FBVyxFQUFFLENBQUM7QUFDOUIsUUFBQSxlQUFlLEdBQVcsVUFBVSxDQUFDO0FBQ2xELGtCQUF5QixDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxJQUFZLEdBQUc7SUFDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6SCxDQUFDO0FBRkQsNEJBRUM7QUFDWSxRQUFBLGNBQWMsR0FBVyxRQUFRLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSw0QkFBNEI7QUFDakYsUUFBQSxjQUFjLEdBQVcsUUFBUSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVEsZUFBZTtBQUNwRSxRQUFBLG9CQUFvQixHQUFXLFFBQVEsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFJLGlDQUFpQztBQUVuRyx3R0FBd0c7QUFDeEcsNEdBQTRHO0FBQzVHLDhHQUE4RztBQUM5Ryx5TEFBeUw7QUFDekw7SUFLSSxvSEFBb0g7SUFDcEgsa01BQWtNO0lBQ2xNLDBUQUEwVDtJQUMxVCwwSEFBMEg7SUFDMUgsbUZBQW1GO0lBQ25GLFlBQVksSUFBMkQsR0FBRyxFQUFFLElBQVksR0FBRyxFQUFFLElBQVksR0FBRyxFQUFFLElBQVksR0FBRztRQVI3SCw2QkFBNkI7UUFDdEIsVUFBSyxHQUFXLElBQUksTUFBTSxFQUFFLENBQUM7UUFRaEMsRUFBRSxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/imgui_demo.js b/imgui_demo.js new file mode 100644 index 0000000..eadc4c6 --- /dev/null +++ b/imgui_demo.js @@ -0,0 +1,2957 @@ +"use strict"; +// dear imgui, v1.53 +// (demo code) +Object.defineProperty(exports, "__esModule", { value: true }); +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +const imgui_4 = require("./imgui"); +const imgui_5 = require("./imgui"); +const imgui_6 = require("./imgui"); +const imgui_7 = require("./imgui"); +const imgui_8 = require("./imgui"); +const imgui_9 = require("./imgui"); +const imgui_10 = require("./imgui"); +const imgui_11 = require("./imgui"); +const imgui_12 = require("./imgui"); +const imgui_13 = require("./imgui"); +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE = "\n"; +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A, _B) { return ((_A) >= (_B)) ? (_A) : (_B); } +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) +class Static { + constructor(value) { + this.value = value; + } +} +const _static = {}; +function STATIC(key, value) { + return _static[key] || (_static[key] = new Static(value)); +} +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); +function ShowHelpMarker(desc) { + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} +function ShowUserGuide() { + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} +exports.ShowUserGuide = ShowUserGuide; +// Demonstrate most ImGui features (big function!) +function ShowDemoWindow(p_open = null) { + // Examples apps + /* static */ const show_app_main_menu_bar = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console = STATIC("show_app_console", false); + /* static */ const show_app_log = STATIC("show_app_log", false); + /* static */ const show_app_layout = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor = STATIC("show_app_style_editor", false); + /* static */ const show_app_metrics = STATIC("show_app_metrics", false); + /* static */ const show_app_about = STATIC("show_app_about", false); + if (show_app_main_menu_bar.value) + ShowExampleAppMainMenuBar(); + if (show_app_console.value) + ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) + ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) + ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) + ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) + ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) + ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) + ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) + ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) + ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) + ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + if (show_app_metrics.value) { + ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); + } + if (show_app_style_editor.value) { + ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ + ShowStyleEditor(); + ImGui.End(); + } + if (show_app_about.value) { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, 64 /* AlwaysAutoResize */); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + /* static */ const no_titlebar = STATIC("no_titlebar", false); + /* static */ const no_scrollbar = STATIC("no_scrollbar", false); + /* static */ const no_menu = STATIC("no_menu", false); + /* static */ const no_move = STATIC("no_move", false); + /* static */ const no_resize = STATIC("no_resize", false); + /* static */ const no_collapse = STATIC("no_collapse", false); + /* static */ const no_close = STATIC("no_close", false); + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags = 0; + if (no_titlebar.value) + window_flags |= 1 /* NoTitleBar */; + if (no_scrollbar.value) + window_flags |= 8 /* NoScrollbar */; + if (!no_menu.value) + window_flags |= 1024 /* MenuBar */; + if (no_move.value) + window_flags |= 4 /* NoMove */; + if (no_resize.value) + window_flags |= 2 /* NoResize */; + if (no_collapse.value) + window_flags |= 32 /* NoCollapse */; + if (no_close.value) + p_open = null; // Don't pass our bool* to Begin + ImGui.SetNextWindowSize(new imgui_6.ImVec2(550, 680), 4 /* FirstUseEver */); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + ImGui.Text(`dear imgui says hello. (${imgui_1.IMGUI_VERSION})`); + // Menu + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("Menu")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ ShowUserGuide(); + } + if (ImGui.CollapsingHeader("Window options")) { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + if (ImGui.TreeNode("Style")) { + /*ImGui.*/ ShowStyleEditor(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Capture/Logging")) { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Widgets")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const clicked = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + /* static */ const check = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + /* static */ const e = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); + ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(i / 7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr = STATIC("arr_", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + ImGui.Separator(); + ImGui.LabelText("label", "Value"); + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1 = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + // General BeginCombo() API, you have full control over your selection data and display type + const items = ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS"]; + /* static */ const current_item_2 = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) { + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(items); n++) { + const is_selected = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + { + /* static */ const str0 = STATIC("str0", new imgui_4.ImStringBuffer(128, "Hello, world!")); + /* static */ const i0 = STATIC("i0", 123); + /* static */ const f0 = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, imgui_3.IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); + ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); + ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + /* static */ const vec4a = STATIC("vec4a", [0.10, 0.20, 0.30, 0.44]); + ImGui.InputFloat3("input float3", vec4a.value); + } + { + /* static */ const i1 = STATIC("i1#415", 50), i2 = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); + ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + /* static */ const f1 = STATIC("f1#421", 1.00), f2 = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + { + /* static */ const i1 = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); + ShowHelpMarker("CTRL+click to input value."); + /* static */ const f1 = STATIC("f1#427", 0.123), f2 = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + /* static */ const col1 = STATIC("col1", [1.0, 0.0, 0.2]); + /* static */ const col2 = STATIC("col2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit4("color 2", col2.value); + const listbox_items = ["Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon"]; + /* static */ const listbox_item_current = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + /* static */ const listbox_item_current2 = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Trees")) { + if (ImGui.TreeNode("Basic trees")) { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) + console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Advanced, with Selectable nodes")) { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + /* static */ const selection_mask = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(14 /* IndentSpacing */, ImGui.GetFontSize() * 3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags = 128 /* OpenOnArrow */ | 64 /* OpenOnDoubleClick */ | ((selection_mask.value & (1 << i)) ? 1 /* Selected */ : 0); + if (i < 3) { + // Node + const node_open = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= 256 /* Leaf */ | 8 /* NoTreePushOnOpen */; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Collapsing Headers")) { + /* static */ const closable_group = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Bullets")) { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); + ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); + ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text")) { + if (ImGui.TreeNode("Colored Text")) { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new imgui_7.ImVec4(1.0, 0.0, 1.0, 1.0), "Pink"); + ImGui.TextColored(new imgui_7.ImVec4(1.0, 1.0, 0.0, 1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); + ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Word Wrapping")) { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + /* static */ const wrap_width = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + ImGui.Text("Test paragraph 1:"); + let pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("UTF-8 Text")) { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf = STATIC("buf", new imgui_4.ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Images")) { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io = ImGui.GetIO(); + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id = io.Fonts.TexID; + const my_tex_w = io.Fonts.TexWidth; + const my_tex_h = io.Fonts.TexHeight; + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(my_tex_w, my_tex_h), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + const focus_sz = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; + if (focus_x < 0.0) + focus_x = 0.0; + else if (focus_x > my_tex_w - focus_sz) + focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; + if (focus_y < 0.0) + focus_y = 0.0; + else if (focus_y > my_tex_h - focus_sz) + focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0 = new imgui_6.ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1 = new imgui_6.ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(128, 128), uv0, uv1, new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); + let frame_padding = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new imgui_6.ImVec2(32, 32), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(32.0 / my_tex_w, 32 / my_tex_h), frame_padding, new imgui_7.ImVec4(0, 0, 0, 1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Selectables")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const selected = STATIC("selected#672", [false, true, false, false]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], 4 /* AllowDoubleClick */)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) { + /* static */ const selected = STATIC("selected#687", [false, false, false]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); + ImGui.SameLine(300); + ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) { + ImGui.Columns(3, null, false); + /* static */ const selected = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) { + const label = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) { + /* static */ const selected = STATIC("selected#712", [true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true]); + for (let i = 0; i < 16; i++) { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new imgui_6.ImVec2(50, 50))) { + let x = i % 4, y = i / 4; + if (x > 0) + selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) + selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) + selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) + selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) + ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Filtered Text Input")) { + /* static */ const buf1 = STATIC("buf1", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("default", buf1.value, imgui_3.IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2 = STATIC("buf2", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("decimal", buf2.value, imgui_3.IM_ARRAYSIZE(buf2.value), 1 /* CharsDecimal */); + /* static */ const buf3 = STATIC("buf3", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("hexadecimal", buf3.value, imgui_3.IM_ARRAYSIZE(buf3.value), 2 /* CharsHexadecimal */ | 4 /* CharsUppercase */); + /* static */ const buf4 = STATIC("buf4", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("uppercase", buf4.value, imgui_3.IM_ARRAYSIZE(buf4.value), 4 /* CharsUppercase */); + /* static */ const buf5 = STATIC("buf5", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("no blank", buf5.value, imgui_3.IM_ARRAYSIZE(buf5.value), 8 /* CharsNoBlank */); + class TextFilters { + static FilterImGuiLetters(data) { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) + return 0; return 1; } + } + /* static */ const buf6 = STATIC("buf6", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("\"imgui\" letters", buf6.value, imgui_3.IM_ARRAYSIZE(buf6.value), 512 /* CallbackCharFilter */, TextFilters.FilterImGuiLetters); + ImGui.Text("Password input"); + /* static */ const bufpass = STATIC("bufpass", new imgui_4.ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 32768 /* Password */ | 8 /* CharsNoBlank */); + ImGui.SameLine(); + ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 8 /* CharsNoBlank */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-line Text Input")) { + /* static */ const read_only = STATIC("read_only", false); + /* static */ const text = STATIC("text", new imgui_4.ImStringBuffer(1024 * 16, "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, imgui_3.IM_ARRAYSIZE(text.value), new imgui_6.ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), 1024 /* AllowTabInput */ | (read_only.value ? 16384 /* ReadOnly */ : 0)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Plots widgets")) { + /* static */ const animate = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + /* static */ const arr = STATIC("arr", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + ImGui.PlotLines_Array("Frame Times", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset = STATIC("values_offset", 0); + /* static */ const refresh_time = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) { + /* static */ const phase = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value + 1) % imgui_3.IM_ARRAYSIZE(values.value); + phase.value += 0.10 * values_offset.value; + refresh_time.value += 1.0 / 60.0; + } + ImGui.PlotLines_Array("Lines", values.value, imgui_3.IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, imgui_3.IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new imgui_6.ImVec2(0, 80)); + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs { + static Sin(data, i) { return Math.sin(i * 0.1); } + static Saw(data, i) { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type = STATIC("func_type", 0), display_count = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); + ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.Separator(); + // Animate a simple progress bar + /* static */ const progress = STATIC("progress", 0.0), progress_dir = STATIC("progress_dir", 1.0); + if (animate.value) { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { + progress.value = +1.1; + progress_dir.value *= -1.0; + } + if (progress.value <= -0.1) { + progress.value = -0.1; + progress_dir.value *= -1.0; + } + } + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0.0, 0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + const progress_saturated = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf = `${(progress_saturated * 1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0., 0.), buf); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Color/Picker Widgets")) { + /* static */ const color = STATIC("color#863", new imgui_9.ImColor(114, 144, 154, 200).toImVec4()); + /* static */ const hdr = STATIC("hdr", false); + /* static */ const alpha_preview = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview = STATIC("alpha_half_preview", false); + /* static */ const options_menu = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); + ImGui.SameLine(); + ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); + ImGui.SameLine(); + ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags = (hdr.value ? 4096 /* HDR */ : 0) | (alpha_half_preview.value ? 2048 /* AlphaPreviewHalf */ : (alpha_preview.value ? 1024 /* AlphaPreview */ : 0)) | (options_menu.value ? 0 : 8 /* NoOptions */); + ImGui.Text("Color widget:"); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, 16384 /* HSV */ | misc_flags); + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, 131072 /* Float */ | misc_flags); + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); + ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, 32 /* NoInputs */ | 128 /* NoLabel */ | misc_flags); + ImGui.Text("Color button with Custom Picker Popup:"); + // Generate a dummy palette + /* static */ const saved_palette_inited = STATIC("saved_palette_inited", false); + /* static */ const saved_palette = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) { + saved_palette.value[n] = new imgui_7.ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r = [0.0]; + const g = [0.0]; + const b = [0.0]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + /* static */ const backup_color = STATIC("backup_color", new imgui_7.ImVec4()); + let open_popup = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | 256 /* NoSidePreview */ | 16 /* NoSmallPreview */); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(saved_palette.value); n++) { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], 2 /* NoAlpha */ | 4 /* NoPicker */ | 64 /* NoTooltip */, new imgui_6.ImVec2(20, 20))) + color.value.Copy(new imgui_7.ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + if (ImGui.BeginDragDropTarget()) { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new imgui_6.ImVec2(80, 80)); + ImGui.Text("Color picker:"); + /* static */ const alpha = STATIC("alpha", true); + /* static */ const alpha_bar = STATIC("alpha_bar", true); + /* static */ const side_preview = STATIC("side_preview", true); + /* static */ const ref_color = STATIC("ref_color", false); + /* static */ const ref_color_v = STATIC("ref_color_v", new imgui_7.ImVec4(1.0, 0.0, 1.0, 0.5)); + /* static */ const inputs_mode = STATIC("inputs_mode", 2); + /* static */ const picker_mode = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, 32 /* NoInputs */ | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); + ShowHelpMarker("User can right-click the picker to change mode."); + let flags = misc_flags; + if (!alpha.value) + flags |= 2 /* NoAlpha */; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) + flags |= 512 /* AlphaBar */; + if (!side_preview.value) + flags |= 256 /* NoSidePreview */; + if (picker_mode.value === 1) + flags |= 262144 /* PickerHueBar */; + if (picker_mode.value === 2) + flags |= 524288 /* PickerHueWheel */; + if (inputs_mode.value === 1) + flags |= 32 /* NoInputs */; + if (inputs_mode.value === 2) + flags |= 8192 /* RGB */; + if (inputs_mode.value === 3) + flags |= 16384 /* HSV */; + if (inputs_mode.value === 4) + flags |= 32768 /* HEX */; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); + ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(65536 /* Uint8 */ | 16384 /* HSV */); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(131072 /* Float */ | 8192 /* RGB */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Range Widgets")) { + /* static */ const begin = STATIC("begin", 10), end = STATIC("end", 90); + /* static */ const begin_i = STATIC("begin_i", 100), end_i = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-component Widgets")) { + /* static */ const vec4f = STATIC("vec4f", [0.10, 0.20, 0.30, 0.44]); + /* static */ const vec4i = STATIC("vec4i", [1, 5, 100, 255]); + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Vertical Sliders")) { + const spacing = 4; + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(spacing, spacing)); + /* static */ const int_value = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new imgui_6.ImVec2(18, 160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + /* static */ const values = STATIC("values#1072", [0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(7 /* FrameBg */, imgui_9.ImColor.HSV(i / 7.0, 0.5, 0.5)); + ImGui.PushStyleColor(8 /* FrameBgHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.5)); + ImGui.PushStyleColor(9 /* FrameBgActive */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.5)); + ImGui.PushStyleColor(19 /* SliderGrab */, imgui_9.ImColor.HSV(i / 7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(18, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2 = STATIC("values2", [0.20, 0.80, 0.40, 0.25]); + const rows = 3; + const small_slider_size = new imgui_6.ImVec2(18, (160.0 - (rows - 1) * spacing) / rows); + for (let nx = 0; nx < 4; nx++) { + if (nx > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) { + ImGui.PushID(nx * rows + ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(15 /* GrabMinSize */, 40); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(40, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Layout")) { + if (ImGui.TreeNode("Child regions")) { + /* static */ const disable_mouse_wheel = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + ImGui.Text("Without border"); + /* static */ const line = STATIC("line", 50); + let goto_line = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, 32 /* EnterReturnsTrue */) || goto_line; + ImGui.PopItemWidth(); + ImGui.BeginChild("Sub1", new imgui_6.ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5, 300), false, 2048 /* HorizontalScrollbar */ | (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + for (let i = 0; i < 100; i++) { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + ImGui.SameLine(); + ImGui.PushStyleVar(5 /* ChildRounding */, 5.0); + ImGui.BeginChild("Sub2", new imgui_6.ImVec2(0, 300), true, (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) { + if (i === 50) + ImGui.NextColumn(); + const buf = `${("00000000" + (i * 5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new imgui_6.ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Widgets Width")) { + /* static */ const f = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); + ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Basic Horizontal Layout")) { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + // Text + ImGui.Text("Two items: Hello"); + ImGui.SameLine(); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Adjust spacing + ImGui.Text("More spacing: Hello"); + ImGui.SameLine(0, 20); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); + ImGui.SameLine(); + ImGui.Button("Banana"); + ImGui.SameLine(); + ImGui.Button("Apple"); + ImGui.SameLine(); + ImGui.Button("Corniflower"); + // Button + ImGui.Text("Small buttons"); + ImGui.SameLine(); + ImGui.SmallButton("Like this one"); + ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.Text("x=150"); + ImGui.SameLine(300); + ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.SmallButton("x=150"); + ImGui.SameLine(300); + ImGui.SmallButton("x=300"); + // Checkbox + /* static */ const c1 = STATIC("c1", false), c2 = STATIC("c2", false), c3 = STATIC("c3", false), c4 = STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + // Various + /* static */ const f0 = STATIC("f0#1255", 1.0), f1 = STATIC("f1#1255", 2.0), f2 = STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items = ["AAAA", "BBBB", "CCCC", "DDDD"]; + /* static */ const item = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0, 5.0); + ImGui.PopItemWidth(); + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection = STATIC("selection", [0, 1, 2, 3]); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + // Dummy + const sz = new imgui_6.ImVec2(30, 30); + ImGui.Button("A", sz); + ImGui.SameLine(); + ImGui.Dummy(sz); + ImGui.SameLine(); + ImGui.Button("B", sz); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Groups")) { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size = ImGui.GetItemRectSize(); + const values = [0.5, 0.20, 0.80, 0.60, 0.25]; + ImGui.PlotHistogram_Array("##values", values, imgui_3.IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + ImGui.Button("ACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text Baseline Alignment")) { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + ImGui.Text("One\nTwo\nThree"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + ImGui.Button("HOP##1"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("HOP##2"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("TEST##1"); + ImGui.SameLine(); + ImGui.Text("TEST"); + ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); + ImGui.SameLine(); + ImGui.Button("Widget##1"); + ImGui.SameLine(); + ImGui.Text("Widget"); + ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); + ImGui.SameLine(); + ImGui.Button("Widget##3"); + // Tree + const spacing = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##2"); + if (node_open) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##4"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Scrolling")) { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track = STATIC("track", true); + /* static */ const track_line = STATIC("track_line", 50), scroll_to_px = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); + track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); + scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) + track.value = false; + for (let i = 0; i < 5; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new imgui_6.ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) { + if (track.value && line === track_line.value) { + ImGui.TextColored(new imgui_9.ImColor(255, 255, 0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y = ImGui.GetScrollY(), scroll_max_y = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.Bullet(); + ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); + ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(10 /* FrameRounding */, 3.0); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, ImGui.GetFrameHeightWithSpacing() * 7 + 30), true, 2048 /* HorizontalScrollbar */); + for (let line = 0; line < lines.value; line++) { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) { + if (n > 0) + ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf = n.toFixed(0); + const label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; + const hue = n * 0.05; + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new imgui_6.ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x = ImGui.GetScrollX(), scroll_max_x = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta = 0.0; + ImGui.SmallButton("<<"); + if (ImGui.IsItemActive()) + scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text("Scroll from code"); + ImGui.SameLine(); + ImGui.SmallButton(">>"); + if (ImGui.IsItemActive()) + scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Clipping")) { + /* static */ const size = STATIC("size", new imgui_6.ImVec2(100, 100)), offset = STATIC("offset", new imgui_6.ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos = ImGui.GetCursorScreenPos(); + const clip_rect = new imgui_7.ImVec4(pos.x, pos.y, pos.x + size.value.x, pos.y + size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { + offset.value.x += ImGui.GetIO().MouseDelta.x; + offset.value.y += ImGui.GetIO().MouseDelta.y; + } + ImGui.GetWindowDrawList().AddRectFilled(pos, new imgui_6.ImVec2(pos.x + size.value.x, pos.y + size.value.y), imgui_8.IM_COL32(90, 90, 120, 255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize() * 2.0, new imgui_6.ImVec2(pos.x + offset.value.x, pos.y + offset.value.y), imgui_8.IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Popups & Modal windows")) { + if (ImGui.TreeNode("Popups")) { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + /* static */ const selected_fish = STATIC("selected_fish", -1); + const names = ["Bream", "Haddock", "Mackerel", "Pollock", "Tilefish"]; + /* static */ const toggles = STATIC("toggles", [true, false, false, false, false]); + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Context menus")) { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) { + if (ImGui.Selectable("Set to zero")) + value.value = 0.0; + if (ImGui.Selectable("Set to PI")) + value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + /* static */ const name = STATIC("name", new imgui_4.ImStringBuffer(32, "Label1")); + const buf = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, imgui_3.IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); + ImGui.Text("(<-- right-click here)"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Modals")) { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, 64 /* AlwaysAutoResize */)) { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + /* static */ const dont_ask_me_next_time = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + if (ImGui.Button("OK", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color = STATIC("color#2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Menus inside a regular window")) { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Columns")) { + ImGui.PushID("Columns"); + // Basic columns + if (ImGui.TreeNode("Basic")) { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) { + const label = `Item ${n}`; + if (ImGui.Selectable(label)) { } + if (ImGui.Button(label, new imgui_6.ImVec2(-1, 0))) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); + ImGui.NextColumn(); + ImGui.Text("Name"); + ImGui.NextColumn(); + ImGui.Text("Path"); + ImGui.NextColumn(); + ImGui.Text("Hovered"); + ImGui.NextColumn(); + ImGui.Separator(); + const names = ["One", "Two", "Three"]; + const paths = ["/path/one", "/path/two", "/path/three"]; + /* static */ const selected = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) { + const label = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, 2 /* SpanAllColumns */)) + selected.value = i; + const hovered = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); + ImGui.NextColumn(); + ImGui.Text(paths[i]); + ImGui.NextColumn(); + ImGui.Text(`${hovered}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category A")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Borders")) { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders = STATIC("h_borders", true); + /* static */ const v_borders = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4 * 3; i++) { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.SetNextWindowContentSize(new imgui_6.ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 20), false, 2048 /* HorizontalScrollbar */); + ImGui.Columns(10); + const ITEMS_COUNT = 2000; + const clipper = new imgui_13.ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + const node_open = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); + ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { + ImGui.BulletText("Sailor"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { + ImGui.BulletText("Marin"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + if (ImGui.CollapsingHeader("Filtering")) { + /* static */ const filter = STATIC("filter#1864", new imgui_11.ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines = ["aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world"]; + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + if (ImGui.CollapsingHeader("Inputs & Focus")) { + const io = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); + ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + if (ImGui.TreeNode("Keyboard & Mouse State")) { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (io.MouseDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Mouse clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse dbl-clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseDoubleClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse released:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseReleased(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + ImGui.Text("Keys down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (io.KeysDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Keys pressed:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyPressed(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text("Keys release:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyReleased(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Tabbing")) { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf = STATIC("buf1#1921", new imgui_4.ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focus from code")) { + const focus_1 = ImGui.Button("Focus on 1"); + ImGui.SameLine(); + const focus_2 = ImGui.Button("Focus on 2"); + ImGui.SameLine(); + const focus_3 = ImGui.Button("Focus on 3"); + let has_focus = 0; + /* static */ const buf = STATIC("buf2#1944", new imgui_4.ImStringBuffer(128, "click on a button to set focus")); + if (focus_1) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 1; + if (focus_2) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 2; + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focused & Hovered Test")) { + /* static */ const embed_all_inside_a_child_window = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 25), true); + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(1 /* ChildWindows */)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(2 /* RootWindow */)}\n`); + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(1 /* ChildWindows */)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(2 /* RootWindow */)}\n"`); + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText(`IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(32 /* AllowWhenOverlapped */)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(52 /* RectOnly */)}\n`); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Dragging")) { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) { + // Draw a line between the button and the mouse cursor + const draw_list = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[21 /* Button */]), 4.0); + draw_list.PopClipRect(); + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold = ImGui.GetMouseDragDelta(0); + const mouse_delta = io.MouseDelta; + ImGui.SameLine(); + ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Mouse cursors")) { + const mouse_cursors_names = ["Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE"]; + imgui_2.IM_ASSERT(imgui_3.IM_ARRAYSIZE(mouse_cursors_names) === 7 /* COUNT */); + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); + ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < 7 /* COUNT */; i++) { + const label = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); + ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + ImGui.End(); +} +exports.ShowDemoWindow = ShowDemoWindow; +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +function ShowStyleSelector(label) { + /* static */ const style_idx = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) { + switch (style_idx.value) { + case 0: + ImGui.StyleColorsClassic(); + break; + case 1: + ImGui.StyleColorsDark(); + break; + case 2: + ImGui.StyleColorsLight(); + break; + } + return true; + } + return false; +} +exports.ShowStyleSelector = ShowStyleSelector; +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +function ShowFontSelector(label) { + const io = ImGui.GetIO(); + const font_current = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker("- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} +exports.ShowFontSelector = ShowFontSelector; +function ShowStyleEditor(ref = null) { + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style = ImGui.GetStyle(); + /* static */ const ref_saved_style = STATIC("ref_saved_style", new imgui_10.ImGuiStyle()); + // Default to using internal storage as reference + /* static */ const init = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + if (ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ ShowFontSelector("Fonts##Selector"); + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { + let window_border = (style.WindowBorderSize > 0.0); + if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) + style.WindowBorderSize = window_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let frame_border = (style.FrameBorderSize > 0.0); + if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) + style.FrameBorderSize = frame_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let popup_border = (style.PopupBorderSize > 0.0); + if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) + style.PopupBorderSize = popup_border ? 1.0 : 0.0; + } + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + if (ImGui.TreeNode("Rendering")) { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); + ImGui.SameLine(); + ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) + style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Settings")) { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); + ImGui.SameLine(); + ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Colors")) { + /* static */ const output_dest = STATIC("output_dest", 0); + /* static */ const output_only_modified = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < 43 /* COUNT */; i++) { + const col = style.Colors[i]; + const name = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); + ImGui.PushItemWidth(120); + ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + /* static */ const filter = STATIC("filter#2223", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + /* static */ const alpha_flags = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, 1024 /* AlphaPreview */); + ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, 2048 /* AlphaPreviewHalf */); + ImGui.BeginChild("#colors", new imgui_6.ImVec2(0, 300), true, 16384 /* AlwaysVerticalScrollbar */ | 32768 /* AlwaysHorizontalScrollbar */); + ImGui.PushItemWidth(-160); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], 512 /* AlphaBar */ | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Save")) + ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Revert")) + style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + ImGui.TreePop(); + } + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened = ImGui.TreeNode("Fonts"); + if (fonts_opened) { + const atlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) { + ImGui.Image(atlas.TexID, new imgui_6.ImVec2(atlas.TexWidth, atlas.TexHeight), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_9.ImColor(255, 255, 255, 255).Value, new imgui_9.ImColor(255, 255, 255, 128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + ImGui.PopItemWidth(); +} +exports.ShowStyleEditor = ShowStyleEditor; +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar() { + if (ImGui.BeginMainMenuBar()) { + if (ImGui.BeginMenu("File")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) { + if (ImGui.MenuItem("Undo", "CTRL+Z")) { } + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) { } // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) { } + if (ImGui.MenuItem("Copy", "CTRL+C")) { } + if (ImGui.MenuItem("Paste", "CTRL+V")) { } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} +function ShowExampleMenuFile() { + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) { } + if (ImGui.MenuItem("Open", "Ctrl+O")) { } + if (ImGui.BeginMenu("Open Recent")) { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) { } + if (ImGui.MenuItem("Save As..")) { } + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) { + /* static */ const enabled = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f = STATIC("f#2408", 0.5); + /* static */ const n = STATIC("n", 0); + /* static */ const b = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) { + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) { + imgui_2.IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) { } + if (ImGui.MenuItem("Quit", "Alt+F4")) { } +} +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open) { + if (!ImGui.Begin("Example: Auto-resizing window", p_open, 64 /* AlwaysAutoResize */)) { + ImGui.End(); + return; + } + /* static */ const lines = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open) { + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static Square(data) { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + static Step(data) { + const step = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + /* static */ const auto_resize = STATIC("auto_resize", false); + /* static */ const type = STATIC("type", 0); + /* static */ const display_lines = STATIC("display_lines", 10); + if (type.value === 0) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 0), new imgui_6.ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, -1), new imgui_6.ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(100, 100), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(400, -1), new imgui_6.ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 400), new imgui_6.ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100); // Fixed Step + const flags = auto_resize.value ? 64 /* AlwaysAutoResize */ : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) { + const desc = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(200, 200)); + } + ImGui.SameLine(); + if (ImGui.Button("500x500")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(500, 500)); + } + ImGui.SameLine(); + if (ImGui.Button("800x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(800, 200)); + } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, imgui_3.IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open) { + const DISTANCE = 10.0; + /* static */ const corner = STATIC("corner", 0); + const window_pos = new imgui_6.ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot = new imgui_6.ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, 1 /* Always */, window_pos_pivot); + ImGui.PushStyleColor(2 /* WindowBg */, new imgui_7.ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, 1 /* NoTitleBar */ | 2 /* NoResize */ | 64 /* AlwaysAutoResize */ | 4 /* NoMove */ | 256 /* NoSavedSettings */)) { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) + corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) + corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) + corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) + corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open) { + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 100), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 200), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf = `Animated title ${"|/-\\".charAt((ImGui.GetTime() / 0.25) & 3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 300), 4 /* FirstUseEver */); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(350, 560), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Custom rendering", p_open)) { + ImGui.End(); + return; + } + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list = ImGui.GetWindowDrawList(); + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz = STATIC("sz", 36.0); + /* static */ const col = STATIC("color#2583", new imgui_7.ImVec4(1.0, 1.0, 0.4, 1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value); + { + const p = ImGui.GetCursorScreenPos(); + const col32 = imgui_8.IM_COL32(col.value.x * 255, col.value.y * 255, col.value.z * 255, col.value.w * 255); + let x = p.x + 4.0, y = p.y + 4.0, spacing = 8.0; + for (let n = 0; n < 2; n++) { + const thickness = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 20, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 0.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */, thickness); + x += sz.value + spacing; + draw_list.AddTriangle(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x, y + sz.value), col32, thickness); + x += spacing; + draw_list.AddBezierCurve(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value * 1.3, y + sz.value * 0.3), new imgui_6.ImVec2(x + sz.value - sz.value * 1.3, y + sz.value - sz.value * 0.3), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x = p.x + 4; + y += sz.value + spacing; + } + draw_list.AddCircleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */); + x += sz.value + spacing; + draw_list.AddTriangleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32); + x += sz.value + spacing; + draw_list.AddRectFilledMultiColor(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), imgui_8.IM_COL32(0, 0, 0), imgui_8.IM_COL32(255, 0, 0), imgui_8.IM_COL32(255, 255, 0), imgui_8.IM_COL32(0, 255, 0)); + ImGui.Dummy(new imgui_6.ImVec2((sz.value + spacing) * 8, (sz.value + spacing) * 3)); + } + ImGui.Separator(); + { + /* static */ const points = STATIC("points", new imgui_5.ImVector()); + /* static */ const adding_line = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) + points.value.clear(); + if (points.value.Size >= 2) { + ImGui.SameLine(); + if (ImGui.Button("Undo")) { + points.value.pop_back(); + points.value.pop_back(); + } + } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) + canvas_size.x = 50.0; + if (canvas_size.y < 50.0) + canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(50, 50, 50), imgui_8.IM_COL32(50, 50, 60), imgui_8.IM_COL32(60, 60, 70), imgui_8.IM_COL32(50, 50, 60)); + draw_list.AddRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(255, 255, 255)); + let adding_preview = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas = new imgui_6.ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) { + if (!adding_line.value && ImGui.IsMouseClicked(0)) { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i + 1].x, canvas_pos.y + points.value.Data[i + 1].y), imgui_8.IM_COL32(255, 255, 0, 255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + constructor() { + // char InputBuf[256]; + this.InputBuf = new imgui_4.ImStringBuffer(256, ""); + // ImVector Items; + this.Items = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + // ImVector History; + this.History = new imgui_5.ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + this.HistoryPos = -1; + // ImVector Commands; + this.Commands = new imgui_5.ImVector(); + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + delete() { } + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + ClearLog() { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + // void Draw(const char* title, bool* p_open) + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin(title, p_open)) { + ImGui.End(); + return; + } + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + // TODO: display items starting from the bottom + if (ImGui.SmallButton("Add Dummy Text")) { + this.AddLog(`${this.Items.Size} some text`); + this.AddLog("some more text"); + this.AddLog("display very important message here!"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { + this.AddLog("[error] something went wrong"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { + this.ClearLog(); + } + ImGui.SameLine(); + const copy_to_clipboard = ImGui.SmallButton("Copy"); + ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) + this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + ImGui.Separator(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + /* static */ const filter = STATIC("filter#2763", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + const footer_height_to_reserve = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new imgui_6.ImVec2(0, -footer_height_to_reserve), false, 2048 /* HorizontalScrollbar */); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.Selectable("Clear")) + this.ClearLog(); + ImGui.EndPopup(); + } + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(4, 1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) { + // const char* item = Items[i]; + const item = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col = new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) + col = new imgui_7.ImVec4(1.0, 0.4, 0.4, 1.0); + else if (/^# /.test(item)) + col = new imgui_7.ImVec4(1.0, 0.78, 0.58, 1.0); + ImGui.PushStyleColor(0 /* Text */, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + // Command-line + if (ImGui.InputText("Input", this.InputBuf, imgui_3.IM_ARRAYSIZE(this.InputBuf), 32 /* EnterReturnsTrue */ | 64 /* CallbackCompletion */ | 128 /* CallbackHistory */, ExampleAppConsole.TextEditCallbackStub, this)) { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(3 /* RootAndChildWindows */) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + ImGui.End(); + } + // void ExecCommand(const char* command_line) + ExecCommand(command_line) { + this.AddLog(`# ${command_line}\n`); + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size - 1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") { + this.ClearLog(); + } + else if (command_line.toUpperCase() === "HELP") { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + else if (command_line.toUpperCase() === "HISTORY") { + const first = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data) { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console = data.UserData; + return console.TextEditCallback(data); + } + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data) { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) { + case 64 /* CallbackCompletion */: + { + // Example of TEXT COMPLETION + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + break; + } + case 128 /* CallbackHistory */: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} +function ShowExampleAppConsole(p_open) { + /* static */ const console = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog { + constructor() { + // ImGuiTextBuffer Buf; + this.Buf = new imgui_12.ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + this.Filter = new imgui_11.ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + this.LineOffsets = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + } + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear() { this.Buf.clear(); this.LineOffsets.clear(); } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + let old_size = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 400), 4 /* FirstUseEver */); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) + this.Clear(); + ImGui.SameLine(); + const copy = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, 0), false, 2048 /* HorizontalScrollbar */); + if (copy) + ImGui.LogToClipboard(); + if (this.Filter.IsActive()) { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else { + ImGui.TextUnformatted(this.Buf.begin()); + } + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open) { + /* static */ const log = STATIC("log#3073", new ExampleAppLog()); + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time = STATIC("last_time", -1.0); + const time = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) { + const random_words = ["system", "info", "warning", "error", "fatal", "notice", "log"]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * imgui_3.IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + log.value.Draw("Example: Log", p_open); +} +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 440), 4 /* FirstUseEver */); + if (ImGui.Begin("Example: Layout", p_open, 1024 /* MenuBar */)) { + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("File")) { + if (ImGui.MenuItem("Close")) + p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + // left + /* static */ const selected = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new imgui_6.ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) { + const label = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new imgui_6.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) { } + ImGui.SameLine(); + if (ImGui.Button("Save")) { } + ImGui.EndGroup(); + } + ImGui.End(); +} +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(430, 450), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Property editor", p_open)) { + ImGui.End(); + return; + } + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2, 2)); + ImGui.Columns(2); + ImGui.Separator(); + class funcs { + static ShowDummyObject(prefix, uid) { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) { + /* static */ const dummy_members = STATIC("dummy_members", [0.0, 0.0, 1.0, 3.1416, 100.0, 999.0]); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) { + funcs.ShowDummyObject("Child", 424242); + } + else { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref = [dummy_members.value[i] || 0]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Long text display", p_open)) { + ImGui.End(); + return; + } + /* static */ const test_type = STATIC("test_type", 0); + /* static */ const log = STATIC("log#3217", new imgui_12.ImGuiTextBuffer()); + /* static */ const lines = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { + log.value.clear(); + lines.value = 0; + } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value + i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + const clipper = new imgui_13.ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} +// End of Demo code +// #else +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} +// #endif +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2RlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQixjQUFjOztBQUVkLGlHQUFpRztBQUNqRyxzSUFBc0k7QUFDdEksdUdBQXVHO0FBQ3ZHLGdKQUFnSjtBQUNoSiwwSkFBMEo7QUFDMUosMEZBQTBGO0FBQzFGLHNLQUFzSztBQUN0Syx3SEFBd0g7QUFDeEgsYUFBYTtBQUNiLCtEQUErRDtBQUUvRCxzSkFBc0o7QUFDdEosaUpBQWlKO0FBQ2pKLHNJQUFzSTtBQUN0SSw0SkFBNEo7QUFDNUosa0tBQWtLO0FBRWxLLDZEQUE2RDtBQUM3RCxrQ0FBa0M7QUFDbEMsU0FBUztBQUVULHFCQUFxQjtBQUNyQixrREFBa0Q7QUFDbEQsd0VBQXdFO0FBQ3hFLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsb0VBQW9FO0FBQ3BFLDBDQUEwQztBQUMxQyxRQUFRO0FBQ1IsMENBQTBDO0FBQzFDLFNBQVM7QUFFVCxpQ0FBaUM7QUFDakMsbUNBQXdDO0FBQ3hDLG1DQUFvQztBQUNwQyxtQ0FBdUM7QUFDdkMsbUNBQXlDO0FBcUJ6QyxtQ0FBbUM7QUFDbkMsbUNBQW1EO0FBQ25ELG1DQUFtRDtBQUNuRCxtQ0FBbUM7QUFDbkMsbUNBQWtDO0FBRWxDLG9DQUFxQztBQUVyQyxvQ0FBMEM7QUFDMUMsb0NBQTBDO0FBQzFDLG9DQUEyQztBQUkzQyxrQkFBa0I7QUFDbEIsa0lBQWtJO0FBQ2xJLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLCtKQUErSjtBQUMvSixzTUFBc007QUFDdE0sZ0lBQWdJO0FBQ2hJLDhIQUE4SDtBQUM5SCx3VEFBd1Q7QUFDeFQsMkNBQTJDO0FBQzNDLHFJQUFxSTtBQUNySSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLDZIQUE2SDtBQUM3SCw0SUFBNEk7QUFDNUksNkpBQTZKO0FBQzdKLG1JQUFtSTtBQUNuSSxzQkFB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QUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzlMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUMzQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUss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LEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2hILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxD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QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQy9NLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxD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QUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzdJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzlJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQ0FBb0QsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUM3SyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQ25LLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUMzRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUNqSCxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUssQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFBQyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ2xHLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3pNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztRQUMxQixDQUFDO1FBQ0QsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1FBQ3RILFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDNUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxjQUFNLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDbEgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxjQUFNLENBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGtDQUFvRCxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDeEssU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUM7UUFDOUosU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFRLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQVEsQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFRLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BLLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7UUFDRyxZQUFZLENBQUMsTUFBTSxNQUFNLEdBQTZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxnQkFBUSxFQUFVLENBQUMsQ0FBQztRQUMvRixZQUFZLENBQUMsTUFBTSxXQUFXLEdBQW9CLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFBQyxDQUFDO1FBQUMsQ0FBQztRQUNqSSxLQUFLLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUM7UUFFckUsd0hBQXdIO1FBQ3hILDRJQUE0STtRQUM1SSxpSEFBaUg7UUFDakgsTUFBTSxVQUFVLEdBQVcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBWSwwQ0FBMEM7UUFDNUcsTUFBTSxXQUFXLEdBQVcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBUSxvQ0FBb0M7UUFDdEcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMvQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQy9DLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxjQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBRSxnQkFBUSxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQVEsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFFLGdCQUFRLENBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RNLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3SCxJQUFJLGNBQWMsR0FBWSxLQUFLLENBQUM7UUFDcEMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0MsTUFBTSxtQkFBbUIsR0FBVyxJQUFJLGNBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqSSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQ3RCLENBQUM7WUFDRyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDNUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUMxQixDQUFDO1lBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztnQkFDRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM1QyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM3QixDQUFDO1lBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSx1REFBdUQ7UUFDMUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/imgui_demo.ts b/imgui_demo.ts new file mode 100644 index 0000000..c7fe652 --- /dev/null +++ b/imgui_demo.ts @@ -0,0 +1,3151 @@ +// dear imgui, v1.53 +// (demo code) + +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) + +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. + +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif + +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif + +import * as ImGui from "./imgui"; +import { IMGUI_VERSION } from "./imgui"; +import { IM_ASSERT } from "./imgui"; +import { IM_ARRAYSIZE } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImAccess } from "./imgui"; +import { ImScalar } from "./imgui"; +import { ImTuple2 } from "./imgui"; +import { ImTuple3 } from "./imgui"; +import { ImTuple4 } from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiColorEditFlags } from "./imgui"; +import { ImGuiCond } from "./imgui"; +import { ImGuiFocusedFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImGuiInputTextFlags } from "./imgui" +import { ImGuiMouseCursor } from "./imgui"; +import { ImGuiSelectableFlags } from "./imgui"; +import { ImGuiStyleVar } from "./imgui"; +import { ImGuiTreeNodeFlags } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; +import { ImGuiSizeConstraintCallbackData } from "./imgui"; +import { ImDrawCornerFlags } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVector } from "./imgui"; +import { interface_ImVec2, ImVec2 } from "./imgui"; +import { interface_ImVec4, ImVec4 } from "./imgui"; +import { IM_COL32 } from "./imgui"; +import { ImColor } from "./imgui"; +import { ImGuiIO } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextFilter } from "./imgui"; +import { ImGuiTextBuffer } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImFont } from "./imgui"; +import { ImFontAtlas } from "./imgui"; + +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif + +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE: string = "\n"; + +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A: number, _B: number): number { return ((_A) >= (_B)) ? (_A) : (_B); } + +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- + +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif + +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) + +class Static { + constructor(public value: T) {} +} + +const _static: {[key: string]: Static} = {}; + +function STATIC(key: string, value: T): Static { + return _static[key] || (_static[key] = new Static(value)); +} + +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); + +function ShowHelpMarker(desc: string): void +{ + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} + +export function ShowUserGuide(): void +{ + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} + +// Demonstrate most ImGui features (big function!) +export function ShowDemoWindow(p_open: ImAccess | ImScalar | null = null): void +{ + // Examples apps + /* static */ const show_app_main_menu_bar: Static = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console: Static = STATIC("show_app_console", false); + /* static */ const show_app_log: Static = STATIC("show_app_log", false); + /* static */ const show_app_layout: Static = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor: Static = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text: Static = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize: Static = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize: Static = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay: Static = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles: Static = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering: Static = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor: Static = STATIC("show_app_style_editor", false); + + /* static */ const show_app_metrics: Static = STATIC("show_app_metrics", false); + /* static */ const show_app_about: Static = STATIC("show_app_about", false); + + if (show_app_main_menu_bar.value) ShowExampleAppMainMenuBar(); + if (show_app_console.value) ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + + if (show_app_metrics.value) { ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); } + if (show_app_style_editor.value) { ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ShowStyleEditor(); ImGui.End(); } + if (show_app_about.value) + { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + + /* static */ const no_titlebar: Static = STATIC("no_titlebar", false); + /* static */ const no_scrollbar: Static = STATIC("no_scrollbar", false); + /* static */ const no_menu: Static = STATIC("no_menu", false); + /* static */ const no_move: Static = STATIC("no_move", false); + /* static */ const no_resize: Static = STATIC("no_resize", false); + /* static */ const no_collapse: Static = STATIC("no_collapse", false); + /* static */ const no_close: Static = STATIC("no_close", false); + + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags: ImGui.WindowFlags = 0; + if (no_titlebar.value) window_flags |= ImGuiWindowFlags.NoTitleBar; + if (no_scrollbar.value) window_flags |= ImGuiWindowFlags.NoScrollbar; + if (!no_menu.value) window_flags |= ImGuiWindowFlags.MenuBar; + if (no_move.value) window_flags |= ImGuiWindowFlags.NoMove; + if (no_resize.value) window_flags |= ImGuiWindowFlags.NoResize; + if (no_collapse.value) window_flags |= ImGuiWindowFlags.NoCollapse; + if (no_close.value) p_open = null; // Don't pass our bool* to Begin + + ImGui.SetNextWindowSize(new ImVec2(550,680), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) + { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + + ImGui.Text(`dear imgui says hello. (${IMGUI_VERSION})`); + + // Menu + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("Menu")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) + { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) + { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) + { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ShowUserGuide(); + } + + if (ImGui.CollapsingHeader("Window options")) + { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + + if (ImGui.TreeNode("Style")) + { + /*ImGui.*/ShowStyleEditor(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Capture/Logging")) + { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Widgets")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const clicked: Static = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) + { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + + /* static */ const check: Static = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + + /* static */ const e: Static = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(i/7.0, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(i/7.0, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(i/7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr: Static = STATIC("arr_", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + + ImGui.Separator(); + + ImGui.LabelText("label", "Value"); + + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1: Static = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + + // General BeginCombo() API, you have full control over your selection data and display type + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" ]; + /* static */ const current_item_2: Static = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) // The second parameter is the label previewed before opening the combo. + { + for (let n = 0; n < IM_ARRAYSIZE(items); n++) + { + const is_selected: boolean = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + + { + /* static */ const str0: Static = STATIC("str0", new ImStringBuffer(128, "Hello, world!")); + /* static */ const i0: Static = STATIC("i0", 123); + /* static */ const f0: Static = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + + /* static */ const vec4a: Static> = STATIC>("vec4a", [ 0.10, 0.20, 0.30, 0.44 ]); + ImGui.InputFloat3("input float3", vec4a.value); + } + + { + /* static */ const i1: Static = STATIC("i1#415", 50), i2: Static = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + + /* static */ const f1: Static = STATIC("f1#421", 1.00), f2: Static = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + + { + /* static */ const i1: Static = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); ShowHelpMarker("CTRL+click to input value."); + + /* static */ const f1: Static = STATIC("f1#427", 0.123), f2: Static = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle: Static = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + + /* static */ const col1: Static> = STATIC>("col1", [ 1.0,0.0,0.2 ]); + /* static */ const col2: Static> = STATIC>("col2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + + ImGui.ColorEdit4("color 2", col2.value); + + const listbox_items: string[] = [ "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" ]; + /* static */ const listbox_item_current: Static = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + + /* static */ const listbox_item_current2: Static = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Trees")) + { + if (ImGui.TreeNode("Basic trees")) + { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) + { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Advanced, with Selectable nodes")) + { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position: Static = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + + /* static */ const selection_mask: Static = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked: number = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(ImGuiStyleVar.IndentSpacing, ImGui.GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) + { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.OpenOnDoubleClick | ((selection_mask.value & (1 << i)) ? ImGuiTreeNodeFlags.Selected : 0); + if (i < 3) + { + // Node + const node_open: boolean = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.NoTreePushOnOpen; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) + { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Collapsing Headers")) + { + /* static */ const closable_group: Static = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Bullets")) + { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text")) + { + if (ImGui.TreeNode("Colored Text")) + { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new ImVec4(1.0,0.0,1.0,1.0), "Pink"); + ImGui.TextColored(new ImVec4(1.0,1.0,0.0,1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Word Wrapping")) + { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + + /* static */ const wrap_width: Static = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + + ImGui.Text("Test paragraph 1:"); + let pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("UTF-8 Text")) + { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf: Static = STATIC("buf", new ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Images")) + { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io: ImGuiIO = ImGui.GetIO(); + + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id: WebGLTexture | null = io.Fonts.TexID; + const my_tex_w: number = io.Fonts.TexWidth; + const my_tex_h: number = io.Fonts.TexHeight; + + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new ImVec2(my_tex_w, my_tex_h), new ImVec2(0,0), new ImVec2(1,1), new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + const focus_sz: number = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; if (focus_x < 0.0) focus_x = 0.0; else if (focus_x > my_tex_w - focus_sz) focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; if (focus_y < 0.0) focus_y = 0.0; else if (focus_y > my_tex_h - focus_sz) focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0: ImVec2 = new ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1: ImVec2 = new ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new ImVec2(128,128), uv0, uv1, new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count: Static = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); + let frame_padding: number = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new ImVec2(32,32), new ImVec2(0,0), new ImVec2(32.0/my_tex_w,32/my_tex_h), frame_padding, new ImVec4(0,0,0,1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Selectables")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const selected: Static = STATIC("selected#672", [ false, true, false, false ]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], ImGuiSelectableFlags.AllowDoubleClick)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) + { + /* static */ const selected: Static = STATIC("selected#687", [ false, false, false ]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); ImGui.SameLine(300); ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) + { + ImGui.Columns(3, null, false); + /* static */ const selected: Static = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) + { + const label: string = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) + { + /* static */ const selected: Static = STATIC("selected#712", [ true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true ]); + for (let i = 0; i < 16; i++) + { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new ImVec2(50,50))) + { + let x: number = i % 4, y: number = i / 4; + if (x > 0) selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Filtered Text Input")) + { + /* static */ const buf1: Static = STATIC("buf1", new ImStringBuffer(64, "")); ImGui.InputText("default", buf1.value, IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2: Static = STATIC("buf2", new ImStringBuffer(64, "")); ImGui.InputText("decimal", buf2.value, IM_ARRAYSIZE(buf2.value), ImGuiInputTextFlags.CharsDecimal); + /* static */ const buf3: Static = STATIC("buf3", new ImStringBuffer(64, "")); ImGui.InputText("hexadecimal", buf3.value, IM_ARRAYSIZE(buf3.value), ImGuiInputTextFlags.CharsHexadecimal | ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf4: Static = STATIC("buf4", new ImStringBuffer(64, "")); ImGui.InputText("uppercase", buf4.value, IM_ARRAYSIZE(buf4.value), ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf5: Static = STATIC("buf5", new ImStringBuffer(64, "")); ImGui.InputText("no blank", buf5.value, IM_ARRAYSIZE(buf5.value), ImGuiInputTextFlags.CharsNoBlank); + class TextFilters { public static FilterImGuiLetters(data: ImGuiTextEditCallbackData): number { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) return 0; return 1; } } + /* static */ const buf6: Static = STATIC("buf6", new ImStringBuffer(64, "")); ImGui.InputText("\"imgui\" letters", buf6.value, IM_ARRAYSIZE(buf6.value), ImGuiInputTextFlags.CallbackCharFilter, TextFilters.FilterImGuiLetters); + + ImGui.Text("Password input"); + /* static */ const bufpass: Static = STATIC("bufpass", new ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.Password | ImGuiInputTextFlags.CharsNoBlank); + ImGui.SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.CharsNoBlank); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-line Text Input")) + { + /* static */ const read_only: Static = STATIC("read_only", false); + /* static */ const text: Static = STATIC("text", new ImStringBuffer(1024*16, + "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, IM_ARRAYSIZE(text.value), new ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), ImGuiInputTextFlags.AllowTabInput | (read_only.value ? ImGuiInputTextFlags.ReadOnly : 0)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Plots widgets")) + { + /* static */ const animate: Static = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + + /* static */ const arr: Static = STATIC("arr", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + ImGui.PlotLines_Array("Frame Times", arr.value, IM_ARRAYSIZE(arr.value)); + + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values: Static = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset: Static = STATIC("values_offset", 0); + /* static */ const refresh_time: Static = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) // Create dummy data at fixed 60 hz rate for the demo + { + /* static */ const phase: Static = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value+1) % IM_ARRAYSIZE(values.value); + phase.value += 0.10*values_offset.value; + refresh_time.value += 1.0/60.0; + } + ImGui.PlotLines_Array("Lines", values.value, IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new ImVec2(0,80)); + + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs + { + public static Sin(data: any, i: number): number { return Math.sin(i * 0.1); } + public static Saw(data: any, i: number): number { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type: Static = STATIC("func_type", 0), display_count: Static = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func: (data: any, i: number) => number = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.Separator(); + + // Animate a simple progress bar + /* static */ const progress: Static = STATIC("progress", 0.0), progress_dir: Static = STATIC("progress_dir", 1.0); + if (animate.value) + { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { progress.value = +1.1; progress_dir.value *= -1.0; } + if (progress.value <= -0.1) { progress.value = -0.1; progress_dir.value *= -1.0; } + } + + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new ImVec2(0.0,0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + + const progress_saturated: number = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf: string = `${(progress_saturated*1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new ImVec2(0.,0.), buf); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Color/Picker Widgets")) + { + /* static */ const color: Static = STATIC("color#863", new ImColor(114, 144, 154, 200).toImVec4()); + + /* static */ const hdr: Static = STATIC("hdr", false); + /* static */ const alpha_preview: Static = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview: Static = STATIC("alpha_half_preview", false); + /* static */ const options_menu: Static = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); ImGui.SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); ImGui.SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags: ImGuiColorEditFlags = (hdr.value ? ImGuiColorEditFlags.HDR : 0) | (alpha_half_preview.value ? ImGuiColorEditFlags.AlphaPreviewHalf : (alpha_preview.value ? ImGuiColorEditFlags.AlphaPreview : 0)) | (options_menu.value ? 0 : ImGuiColorEditFlags.NoOptions); + + ImGui.Text("Color widget:"); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, ImGuiColorEditFlags.HSV | misc_flags); + + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, ImGuiColorEditFlags.Float | misc_flags); + + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoLabel | misc_flags); + + ImGui.Text("Color button with Custom Picker Popup:"); + + // Generate a dummy palette + /* static */ const saved_palette_inited: Static = STATIC("saved_palette_inited", false); + /* static */ const saved_palette: Static = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) + { + saved_palette.value[n] = new ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r: ImScalar = [ 0.0 ]; + const g: ImScalar = [ 0.0 ]; + const b: ImScalar = [ 0.0 ]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + + /* static */ const backup_color: Static = STATIC("backup_color", new ImVec4()); + let open_popup: boolean = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) + { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) + { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < IM_ARRAYSIZE(saved_palette.value); n++) + { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], ImGuiColorEditFlags.NoAlpha | ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.NoTooltip, new ImVec2(20,20))) + color.value.Copy(new ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + + if (ImGui.BeginDragDropTarget()) + { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new ImVec2(80,80)); + + ImGui.Text("Color picker:"); + /* static */ const alpha: Static = STATIC("alpha", true); + /* static */ const alpha_bar: Static = STATIC("alpha_bar", true); + /* static */ const side_preview: Static = STATIC("side_preview", true); + /* static */ const ref_color: Static = STATIC("ref_color", false); + /* static */ const ref_color_v: Static = STATIC("ref_color_v", new ImVec4(1.0,0.0,1.0,0.5)); + /* static */ const inputs_mode: Static = STATIC("inputs_mode", 2); + /* static */ const picker_mode: Static = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) + { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) + { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, ImGuiColorEditFlags.NoInputs | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); ShowHelpMarker("User can right-click the picker to change mode."); + let flags: ImGuiColorEditFlags = misc_flags; + if (!alpha.value) flags |= ImGuiColorEditFlags.NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) flags |= ImGuiColorEditFlags.AlphaBar; + if (!side_preview.value) flags |= ImGuiColorEditFlags.NoSidePreview; + if (picker_mode.value === 1) flags |= ImGuiColorEditFlags.PickerHueBar; + if (picker_mode.value === 2) flags |= ImGuiColorEditFlags.PickerHueWheel; + if (inputs_mode.value === 1) flags |= ImGuiColorEditFlags.NoInputs; + if (inputs_mode.value === 2) flags |= ImGuiColorEditFlags.RGB; + if (inputs_mode.value === 3) flags |= ImGuiColorEditFlags.HSV; + if (inputs_mode.value === 4) flags |= ImGuiColorEditFlags.HEX; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Uint8 | ImGuiColorEditFlags.HSV); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Float | ImGuiColorEditFlags.RGB); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Range Widgets")) + { + /* static */ const begin: Static = STATIC("begin", 10), end: Static = STATIC("end", 90); + /* static */ const begin_i: Static = STATIC("begin_i", 100), end_i: Static = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-component Widgets")) + { + /* static */ const vec4f: Static> = STATIC>("vec4f", [ 0.10, 0.20, 0.30, 0.44 ]); + /* static */ const vec4i: Static> = STATIC>("vec4i", [ 1, 5, 100, 255 ]); + + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Vertical Sliders")) + { + const spacing: number = 4; + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(spacing, spacing)); + + /* static */ const int_value: Static = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new ImVec2(18,160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + + /* static */ const values: Static = STATIC("values#1072", [ 0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0 ]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.FrameBg, ImColor.HSV(i/7.0, 0.5, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, ImColor.HSV(i/7.0, 0.6, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgActive, ImColor.HSV(i/7.0, 0.7, 0.5)); + ImGui.PushStyleColor(ImGuiCol.SliderGrab, ImColor.HSV(i/7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new ImVec2(18,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2: Static = STATIC("values2", [ 0.20, 0.80, 0.40, 0.25 ]); + const rows: number = 3; + const small_slider_size: Readonly = new ImVec2(18, (160.0-(rows-1)*spacing)/rows); + for (let nx = 0; nx < 4; nx++) + { + if (nx > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) + { + ImGui.PushID(nx*rows+ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(ImGuiStyleVar.GrabMinSize, 40); + ImGui.VSliderFloat("##v", new ImVec2(40,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Layout")) + { + if (ImGui.TreeNode("Child regions")) + { + /* static */ const disable_mouse_wheel: Static = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + + ImGui.Text("Without border"); + /* static */ const line: Static = STATIC("line", 50); + let goto_line: boolean = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, ImGuiInputTextFlags.EnterReturnsTrue) || goto_line; + ImGui.PopItemWidth(); + + ImGui.BeginChild("Sub1", new ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5,300), false, ImGuiWindowFlags.HorizontalScrollbar | (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + for (let i = 0; i < 100; i++) + { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + + ImGui.SameLine(); + + ImGui.PushStyleVar(ImGuiStyleVar.ChildRounding, 5.0); + ImGui.BeginChild("Sub2", new ImVec2(0,300), true, (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) + { + if (i === 50) + ImGui.NextColumn(); + const buf: string = `${("00000000" + (i*5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Widgets Width")) + { + /* static */ const f: Static = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Basic Horizontal Layout")) + { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + + // Text + ImGui.Text("Two items: Hello"); ImGui.SameLine(); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Adjust spacing + ImGui.Text("More spacing: Hello"); ImGui.SameLine(0, 20); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); ImGui.SameLine(); + ImGui.Button("Banana"); ImGui.SameLine(); + ImGui.Button("Apple"); ImGui.SameLine(); + ImGui.Button("Corniflower"); + + // Button + ImGui.Text("Small buttons"); ImGui.SameLine(); + ImGui.SmallButton("Like this one"); ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.Text("x=150"); + ImGui.SameLine(300); ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.SmallButton("x=150"); + ImGui.SameLine(300); ImGui.SmallButton("x=300"); + + // Checkbox + /* static */ const c1: Static=STATIC("c1", false),c2: Static=STATIC("c2", false),c3: Static=STATIC("c3", false),c4: Static=STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + + // Various + /* static */ const f0: Static=STATIC("f0#1255", 1.0), f1: Static=STATIC("f1#1255", 2.0), f2: Static=STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD" ]; + /* static */ const item: Static = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, IM_ARRAYSIZE(items)); ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0,5.0); + ImGui.PopItemWidth(); + + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection: Static = STATIC("selection", [ 0, 1, 2, 3 ]); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + + // Dummy + const sz: Readonly = new ImVec2(30,30); + ImGui.Button("A", sz); ImGui.SameLine(); + ImGui.Dummy(sz); ImGui.SameLine(); + ImGui.Button("B", sz); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Groups")) + { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size: ImVec2 = ImGui.GetItemRectSize(); + const values: number[/*5*/] = [ 0.5, 0.20, 0.80, 0.60, 0.25 ]; + ImGui.PlotHistogram_Array("##values", values, IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + + ImGui.Button("ACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text Baseline Alignment")) + { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + + ImGui.Text("One\nTwo\nThree"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + + ImGui.Button("HOP##1"); ImGui.SameLine(); + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("HOP##2"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("TEST##1"); ImGui.SameLine(); + ImGui.Text("TEST"); ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); ImGui.SameLine(); + ImGui.Button("Widget##1"); ImGui.SameLine(); + ImGui.Text("Widget"); ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); ImGui.SameLine(); + ImGui.Button("Widget##3"); + + // Tree + const spacing: number = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open: boolean = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##2"); + if (node_open) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##4"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Scrolling")) + { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track: Static = STATIC("track", true); + /* static */ const track_line: Static = STATIC("track_line", 50), scroll_to_px: Static = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to: boolean = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) track.value = false; + + for (let i = 0; i < 5; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) + { + if (track.value && line === track_line.value) + { + ImGui.TextColored(new ImColor(255,255,0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else + { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y: number = ImGui.GetScrollY(), scroll_max_y: number = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.Bullet(); ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines: Static = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 3.0); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new ImVec2(0, ImGui.GetFrameHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags.HorizontalScrollbar); + for (let line = 0; line < lines.value; line++) + { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons: number = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) + { + if (n > 0) ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf: string = n.toFixed(0); + const label: string = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; + const hue: number = n*0.05; + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x: number = ImGui.GetScrollX(), scroll_max_x: number = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta: number = 0.0; + ImGui.SmallButton("<<"); if (ImGui.IsItemActive()) scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text("Scroll from code"); ImGui.SameLine(); + ImGui.SmallButton(">>"); if (ImGui.IsItemActive()) scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) + { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Clipping")) + { + /* static */ const size: Static = STATIC("size", new ImVec2(100, 100)), offset: Static = STATIC("offset", new ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos: Readonly = ImGui.GetCursorScreenPos(); + const clip_rect: Readonly = new ImVec4(pos.x, pos.y, pos.x+size.value.x, pos.y+size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { offset.value.x += ImGui.GetIO().MouseDelta.x; offset.value.y += ImGui.GetIO().MouseDelta.y; } + ImGui.GetWindowDrawList().AddRectFilled(pos, new ImVec2(pos.x+size.value.x,pos.y+size.value.y), IM_COL32(90,90,120,255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize()*2.0, new ImVec2(pos.x+offset.value.x,pos.y+offset.value.y), IM_COL32(255,255,255,255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Popups & Modal windows")) + { + if (ImGui.TreeNode("Popups")) + { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + + /* static */ const selected_fish: Static = STATIC("selected_fish", -1); + const names: string[] = [ "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" ]; + /* static */ const toggles: Static = STATIC("toggles", [ true, false, false, false, false ]); + + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) + { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) + { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Context menus")) + { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value: Static = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) + { + if (ImGui.Selectable("Set to zero")) value.value = 0.0; + if (ImGui.Selectable("Set to PI")) value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + + /* static */ const name: Static = STATIC("name", new ImStringBuffer(32, "Label1")); + const buf: string = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). + { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); ImGui.Text("(<-- right-click here)"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Modals")) + { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, ImGuiWindowFlags.AlwaysAutoResize)) + { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + + /* static */ const dont_ask_me_next_time: Static = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + + if (ImGui.Button("OK", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.EndPopup(); + } + + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) + { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item: Static = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color: Static> = STATIC>("color#2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) + { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Menus inside a regular window")) + { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Columns")) + { + ImGui.PushID("Columns"); + + // Basic columns + if (ImGui.TreeNode("Basic")) + { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) + { + const label: string = `Item ${n}`; + if (ImGui.Selectable(label)) {} + if (ImGui.Button(label, new ImVec2(-1,0))) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Text("Hovered"); ImGui.NextColumn(); + ImGui.Separator(); + const names: string[/*3*/] = [ "One", "Two", "Three" ]; + const paths: string[/*3*/] = [ "/path/one", "/path/two", "/path/three" ]; + /* static */ const selected: Static = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) + { + const label: string = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, ImGuiSelectableFlags.SpanAllColumns)) + selected.value = i; + const hovered: boolean = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); ImGui.NextColumn(); + ImGui.Text(paths[i]); ImGui.NextColumn(); + ImGui.Text(`${hovered}`); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) + { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo: Static = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar: Static = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + + if (ImGui.CollapsingHeader("Category A")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) + { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Borders")) + { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders: Static = STATIC("h_borders", true); + /* static */ const v_borders: Static = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4*3; i++) + { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c: string = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.SetNextWindowContentSize(new ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new ImVec2(0, ImGui.GetFontSize() * 20), false, ImGuiWindowFlags.HorizontalScrollbar); + ImGui.Columns(10); + const ITEMS_COUNT: number = 2000; + const clipper: ImGuiListClipper = new ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) + { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) + { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + + const node_open: boolean = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) + { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { ImGui.BulletText("Sailor"); ImGui.TreePop(); } ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { ImGui.BulletText("Marin"); ImGui.TreePop(); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + + if (ImGui.CollapsingHeader("Filtering")) + { + /* static */ const filter: Static = STATIC("filter#1864", new ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines: string[] = [ "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" ]; + for (let i = 0; i < IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + + if (ImGui.CollapsingHeader("Inputs & Focus")) + { + const io: ImGuiIO = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + + if (ImGui.TreeNode("Keyboard & Mouse State")) + { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Mouse clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse dbl-clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseDoubleClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse released:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseReleased(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + + ImGui.Text("Keys down:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Keys pressed:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyPressed(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text("Keys release:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyReleased(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Tabbing")) + { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf: Static = STATIC("buf1#1921", new ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focus from code")) + { + const focus_1: boolean = ImGui.Button("Focus on 1"); ImGui.SameLine(); + const focus_2: boolean = ImGui.Button("Focus on 2"); ImGui.SameLine(); + const focus_3: boolean = ImGui.Button("Focus on 3"); + let has_focus: number = 0; + /* static */ const buf: Static = STATIC("buf2#1944", new ImStringBuffer(128, "click on a button to set focus")); + + if (focus_1) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 1; + + if (focus_2) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 2; + + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focused & Hovered Test")) + { + /* static */ const embed_all_inside_a_child_window: Static = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new ImVec2(0, ImGui.GetFontSize() * 25), true); + + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows | ImGuiFocusedFlags.RootWindow)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.RootWindow)}\n`); + + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows | ImGuiHoveredFlags.RootWindow)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow)}\n"`); + + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText( + `IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenOverlapped)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.RectOnly)}\n`); + + ImGui.BeginChild("child", new ImVec2(0,50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Dragging")) + { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) + { + // Draw a line between the button and the mouse cursor + const draw_list: ImGui.ImDrawList = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[ImGuiCol.Button]), 4.0); + draw_list.PopClipRect(); + + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw: Readonly = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold: Readonly = ImGui.GetMouseDragDelta(0); + const mouse_delta: Readonly = io.MouseDelta; + ImGui.SameLine(); ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Mouse cursors")) + { + const mouse_cursors_names: string[] = [ "Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE" ]; + IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) === ImGuiMouseCursor.COUNT); + + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < ImGuiMouseCursor.COUNT; i++) + { + const label: string = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + + ImGui.End(); +} + +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +export function ShowStyleSelector(label: string): boolean +{ + /* static */ const style_idx: Static = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) + { + switch (style_idx.value) + { + case 0: ImGui.StyleColorsClassic(); break; + case 1: ImGui.StyleColorsDark(); break; + case 2: ImGui.StyleColorsLight(); break; + } + return true; + } + return false; +} + +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +export function ShowFontSelector(label: string): void +{ + const io: ImGuiIO = ImGui.GetIO(); + const font_current: ImFont = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) + { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker( + "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} + +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void +{ + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style: ImGuiStyle = ImGui.GetStyle(); + /* static */ const ref_saved_style: Static = STATIC("ref_saved_style", new ImGuiStyle()); + + // Default to using internal storage as reference + /* static */ const init: Static = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + + if (/*ImGui.*/ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ShowFontSelector("Fonts##Selector"); + + + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { let window_border: boolean = (style.WindowBorderSize > 0.0); if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) style.WindowBorderSize = window_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let frame_border: boolean = (style.FrameBorderSize > 0.0); if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) style.FrameBorderSize = frame_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let popup_border: boolean = (style.PopupBorderSize > 0.0); if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) style.PopupBorderSize = popup_border ? 1.0 : 0.0; } + + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + + if (ImGui.TreeNode("Rendering")) + { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); ImGui.SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Settings")) + { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); ImGui.SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Colors")) + { + /* static */ const output_dest: Static = STATIC("output_dest", 0); + /* static */ const output_only_modified: Static = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) + { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const col: Readonly = style.Colors[i]; + const name: string = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); ImGui.PushItemWidth(120); ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + + /* static */ const filter: Static = STATIC("filter#2223", new ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + + /* static */ const alpha_flags: Static = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreview); ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreviewHalf); + + ImGui.BeginChild("#colors", new ImVec2(0, 300), true, ImGuiWindowFlags.AlwaysVerticalScrollbar | ImGuiWindowFlags.AlwaysHorizontalScrollbar); + ImGui.PushItemWidth(-160); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], ImGuiColorEditFlags.AlphaBar | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) + { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Save")) ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Revert")) style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + + ImGui.TreePop(); + } + + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened: boolean = ImGui.TreeNode("Fonts"); + if (fonts_opened) + { + const atlas: ImFontAtlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) + { + ImGui.Image(atlas.TexID, new ImVec2(atlas.TexWidth, atlas.TexHeight), new ImVec2(0,0), new ImVec2(1,1), new ImColor(255,255,255,255).Value, new ImColor(255,255,255,128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale: Static = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + + ImGui.PopItemWidth(); +} + +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar(): void +{ + if (ImGui.BeginMainMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) + { + if (ImGui.MenuItem("Undo", "CTRL+Z")) {} + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) {} + if (ImGui.MenuItem("Copy", "CTRL+C")) {} + if (ImGui.MenuItem("Paste", "CTRL+V")) {} + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} + +function ShowExampleMenuFile(): void +{ + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) {} + if (ImGui.MenuItem("Open", "Ctrl+O")) {} + if (ImGui.BeginMenu("Open Recent")) + { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) + { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) {} + if (ImGui.MenuItem("Save As..")) {} + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) + { + /* static */ const enabled: Static = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f: Static = STATIC("f#2408", 0.5); + /* static */ const n: Static = STATIC("n", 0); + /* static */ const b: Static = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) + { + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i as ImGuiCol); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i as ImGuiCol)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) // Disabled + { + IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) {} + if (ImGui.MenuItem("Quit", "Alt+F4")) {} +} + +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open: ImAccess): void +{ + if (!ImGui.Begin("Example: Auto-resizing window", p_open, ImGui.WindowFlags.AlwaysAutoResize)) + { + ImGui.End(); + return; + } + + /* static */ const lines: Static = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} + +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open: ImAccess): void +{ + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + public static Square(data: ImGuiSizeConstraintCallbackData): void { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + public static Step(data: ImGuiSizeConstraintCallbackData): void { + const step: number = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + + /* static */ const auto_resize: Static = STATIC("auto_resize", false); + /* static */ const type: Static = STATIC("type", 0); + /* static */ const display_lines: Static = STATIC("display_lines", 10); + if (type.value === 0) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 0), new ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, -1), new ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) ImGui.SetNextWindowSizeConstraints(new ImVec2(100, 100), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) ImGui.SetNextWindowSizeConstraints(new ImVec2(400, -1), new ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 400), new ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100);// Fixed Step + + const flags: ImGuiWindowFlags = auto_resize.value ? ImGuiWindowFlags.AlwaysAutoResize : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) + { + const desc: string[] = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { ImGui.SetWindowSize(new ImVec2(200, 200)); } ImGui.SameLine(); + if (ImGui.Button("500x500")) { ImGui.SetWindowSize(new ImVec2(500, 500)); } ImGui.SameLine(); + if (ImGui.Button("800x200")) { ImGui.SetWindowSize(new ImVec2(800, 200)); } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} + +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open: ImAccess): void +{ + const DISTANCE: number = 10.0; + /* static */ const corner: Static = STATIC("corner", 0); + const window_pos: Readonly = new ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot: Readonly = new ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, ImGuiCond.Always, window_pos_pivot); + ImGui.PushStyleColor(ImGuiCol.WindowBg, new ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags.NoTitleBar|ImGuiWindowFlags.NoResize|ImGuiWindowFlags.AlwaysAutoResize|ImGuiWindowFlags.NoMove|ImGuiWindowFlags.NoSavedSettings)) + { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} + +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open: ImAccess): void +{ + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new ImVec2(100,100), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + + ImGui.SetNextWindowPos(new ImVec2(100,200), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf: string = `Animated title ${"|/-\\".charAt((ImGui.GetTime()/0.25)&3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new ImVec2(100,300), ImGuiCond.FirstUseEver); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} + +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(350,560), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Custom rendering", p_open)) + { + ImGui.End(); + return; + } + + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz: Static = STATIC("sz", 36.0); + /* static */ const col: Static = STATIC("color#2583", new ImVec4(1.0,1.0,0.4,1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value) + { + const p: Readonly = ImGui.GetCursorScreenPos(); + const col32: ImU32 = IM_COL32(col.value.x*255, col.value.y*255, col.value.z*255, col.value.w*255); + let x: number = p.x + 4.0, y: number = p.y + 4.0, spacing: number = 8.0; + for (let n = 0; n < 2; n++) + { + const thickness: number = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 20, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 0.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight, thickness); x += sz.value+spacing; + draw_list.AddTriangle(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y ), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x, y+sz.value), col32, thickness); x += spacing; + draw_list.AddBezierCurve(new ImVec2(x, y), new ImVec2(x+sz.value*1.3,y+sz.value*0.3), new ImVec2(x+sz.value-sz.value*1.3,y+sz.value-sz.value*0.3), new ImVec2(x+sz.value, y+sz.value), col32, thickness); + x = p.x + 4; + y += sz.value+spacing; + } + draw_list.AddCircleFilled(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight); x += sz.value+spacing; + draw_list.AddTriangleFilled(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32); x += sz.value+spacing; + draw_list.AddRectFilledMultiColor(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), IM_COL32(0,0,0), IM_COL32(255,0,0), IM_COL32(255,255,0), IM_COL32(0,255,0)); + ImGui.Dummy(new ImVec2((sz.value+spacing)*8, (sz.value+spacing)*3)); + } + ImGui.Separator(); + { + /* static */ const points: Static> = STATIC("points", new ImVector()); + /* static */ const adding_line: Static = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) points.value.clear(); + if (points.value.Size >= 2) { ImGui.SameLine(); if (ImGui.Button("Undo")) { points.value.pop_back(); points.value.pop_back(); } } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos: ImVec2 = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size: ImVec2 = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) canvas_size.x = 50.0; + if (canvas_size.y < 50.0) canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50,50,50), IM_COL32(50,50,60), IM_COL32(60,60,70), IM_COL32(50,50,60)); + draw_list.AddRect(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255,255,255)); + + let adding_preview: boolean = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas: ImVec2 = new ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) + { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) + { + if (!adding_line.value && ImGui.IsMouseClicked(0)) + { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) + { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new ImVec2(canvas_pos.x + points.value.Data[i+1].x, canvas_pos.y + points.value.Data[i+1].y), IM_COL32(255,255,0,255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} + +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256, ""); + // ImVector Items; + Items: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + // ImVector History; + History: ImVector = new ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + HistoryPos: number = -1; + // ImVector Commands; + Commands: ImVector = new ImVector(); + + constructor() { + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + + delete(): void {} + + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + + ClearLog(): void { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + + // void Draw(const char* title, bool* p_open) + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin(title, p_open)) + { + ImGui.End(); + return; + } + + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) + { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + + // TODO: display items starting from the bottom + + if (ImGui.SmallButton("Add Dummy Text")) { this.AddLog(`${this.Items.Size} some text`); this.AddLog("some more text"); this.AddLog("display very important message here!"); } ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { this.AddLog("[error] something went wrong"); } ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { this.ClearLog(); } ImGui.SameLine(); + const copy_to_clipboard: boolean = ImGui.SmallButton("Copy"); ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + + ImGui.Separator(); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + /* static */ const filter: Static = STATIC("filter#2763", new ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + + const footer_height_to_reserve: number = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags.HorizontalScrollbar); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.Selectable("Clear")) this.ClearLog(); + ImGui.EndPopup(); + } + + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(4,1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) + { + // const char* item = Items[i]; + const item: string = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col: ImVec4 = new ImVec4(1.0,1.0,1.0,1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) col = new ImVec4(1.0,0.4,0.4,1.0); + // else if (strncmp(item, "# ", 2) === 0) col = ImColor(1.0f,0.78f,0.58f,1.0f); + else if (/^# /.test(item)) col = new ImVec4(1.0,0.78,0.58,1.0); + ImGui.PushStyleColor(ImGuiCol.Text, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + + // Command-line + if (ImGui.InputText("Input", this.InputBuf, IM_ARRAYSIZE(this.InputBuf), ImGuiInputTextFlags.EnterReturnsTrue|ImGuiInputTextFlags.CallbackCompletion|ImGuiInputTextFlags.CallbackHistory, ExampleAppConsole.TextEditCallbackStub, this)) + { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(ImGuiFocusedFlags.RootAndChildWindows) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + + ImGui.End(); + } + + // void ExecCommand(const char* command_line) + ExecCommand(command_line: string): void + { + this.AddLog(`# ${command_line}\n`); + + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size-1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) + { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") + { + this.ClearLog(); + } + // else if (Stricmp(command_line, "HELP") === 0) + else if (command_line.toUpperCase() === "HELP") + { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + // else if (Stricmp(command_line, "HISTORY") === 0) + else if (command_line.toUpperCase() === "HISTORY") + { + const first: number = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else + { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data: ImGuiTextEditCallbackData): number + { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console: ExampleAppConsole = data.UserData as ExampleAppConsole; + return console.TextEditCallback(data); + } + + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data: ImGuiTextEditCallbackData): number + { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) + { + case ImGuiInputTextFlags.CallbackCompletion: + { + // Example of TEXT COMPLETION + + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + + break; + } + case ImGuiInputTextFlags.CallbackHistory: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} + +function ShowExampleAppConsole(p_open: ImAccess): void +{ + /* static */ const console: Static = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} + +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog +{ + // ImGuiTextBuffer Buf; + Buf: ImGuiTextBuffer = new ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + Filter: ImGuiTextFilter = new ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + LineOffsets: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear(): void { this.Buf.clear(); this.LineOffsets.clear(); } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void + { + let old_size: number = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(500,400), ImGuiCond.FirstUseEver); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) this.Clear(); + ImGui.SameLine(); + const copy: boolean = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new ImVec2(0,0), false, ImGuiWindowFlags.HorizontalScrollbar); + if (copy) ImGui.LogToClipboard(); + + if (this.Filter.IsActive()) + { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else + { + ImGui.TextUnformatted(this.Buf.begin()); + } + + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} + +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open: ImAccess): void +{ + /* static */ const log: Static = STATIC("log#3073", new ExampleAppLog()); + + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time: Static = STATIC("last_time", -1.0); + const time: number = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) + { + const random_words: string[] = [ "system", "info", "warning", "error", "fatal", "notice", "log" ]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + + log.value.Draw("Example: Log", p_open); +} + +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(500, 440), ImGuiCond.FirstUseEver); + if (ImGui.Begin("Example: Layout", p_open, ImGuiWindowFlags.MenuBar)) + { + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + if (ImGui.MenuItem("Close")) p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + // left + /* static */ const selected: Static = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) + { + const label: string = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) {} + ImGui.SameLine(); + if (ImGui.Button("Save")) {} + ImGui.EndGroup(); + } + ImGui.End(); +} + +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(430,450), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Property editor", p_open)) + { + ImGui.End(); + return; + } + + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2,2)); + ImGui.Columns(2); + ImGui.Separator(); + + class funcs + { + static ShowDummyObject(prefix: string, uid: number): void + { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open: boolean = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) + { + /* static */ const dummy_members: Static = STATIC("dummy_members", [ 0.0,0.0,1.0,3.1416,100.0,999.0 ]); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) + { + funcs.ShowDummyObject("Child", 424242); + } + else + { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label: string = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref: ImScalar = [ dummy_members.value[i] || 0 ]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} + +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Long text display", p_open)) + { + ImGui.End(); + return; + } + + /* static */ const test_type: Static = STATIC("test_type", 0); + /* static */ const log: Static = STATIC("log#3217", new ImGuiTextBuffer()); + /* static */ const lines: Static = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { log.value.clear(); lines.value = 0; } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) + { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value+i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) + { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + const clipper: ImGuiListClipper = new ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} + +// End of Demo code +// #else + +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} + +// #endif diff --git a/imgui_memory_editor.js b/imgui_memory_editor.js new file mode 100644 index 0000000..e9f27e2 --- /dev/null +++ b/imgui_memory_editor.js @@ -0,0 +1,448 @@ +"use strict"; +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +// #include // sprintf, scanf +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +class MemoryEditor { + constructor() { + // typedef unsigned char u8; + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + this.Open = false; + // bool ReadOnly; // = false // set to true to disable any editing + this.ReadOnly = false; + // int Rows; // = 16 // + this.Rows = 16; + // bool OptShowAscii; // = true // + this.OptShowAscii = true; + // bool OptShowHexII; // = false // + this.OptShowHexII = false; + // bool OptGreyOutZeroes; // = true // + this.OptGreyOutZeroes = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + this.OptMidRowsCount = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + this.OptAddrDigitsCount = 0; + // ImU32 HighlightColor; // // color of highlight + this.HighlightColor = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + this.ReadFn = null; + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + this.WriteFn = null; + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + this.HighlightFn = null; + // State/Internals + // bool ContentsWidthChanged; + this.ContentsWidthChanged = false; + // size_t DataEditingAddr; + this.DataEditingAddr = -1; + // bool DataEditingTakeFocus; + this.DataEditingTakeFocus = false; + // char DataInputBuf[32]; + this.DataInputBuf = new imgui_1.ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + this.AddrInputBuf = new imgui_1.ImStringBuffer(32, ""); + // size_t GotoAddr; + this.GotoAddr = -1; + // size_t HighlightMin, HighlightMax; + this.HighlightMin = -1; + this.HighlightMax = -1; + } + GotoAddrAndHighlight(addr_min, addr_max) { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + CalcSizes(s, mem_size, base_display_addr) { + const style = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n, pad = 0) { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + static sscanf_PRISizeT(s) { + return parseInt(s, 16); + } + // Standalone Memory Editor window + DrawWindow(title, mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new imgui_2.ImVec2(0.0, 0.0), new imgui_2.ImVec2(s.WindowWidth, Number.MAX_VALUE)); + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, 8 /* NoScrollbar */)) { + if (ImGui.IsWindowHovered(2 /* RootWindow */ | 1 /* ChildWindows */) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new imgui_2.ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + // Memory Editor contents only + DrawContents(mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x0000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style = ImGui.GetStyle(); + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new imgui_2.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list = ImGui.GetWindowDrawList(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_2.ImVec2(0, 0)); + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_2.ImVec2(0, 0)); + const line_total_count = 0 | ((mem_size + this.Rows - 1) / this.Rows); + const clipper = new imgui_3.ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr = clipper.DisplayStart * this.Rows; + const visible_end_addr = clipper.DisplayEnd * this.Rows; + let data_next = false; + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + const data_editing_addr_backup = this.DataEditingAddr; + let data_editing_addr_next = -1; + if (this.DataEditingAddr !== -1) { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(3 /* UpArrow */)) && this.DataEditingAddr >= this.Rows) { + data_editing_addr_next = this.DataEditingAddr - this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(4 /* DownArrow */)) && this.DataEditingAddr < mem_size - this.Rows) { + data_editing_addr_next = this.DataEditingAddr + this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(1 /* LeftArrow */)) && this.DataEditingAddr > 0) { + data_editing_addr_next = this.DataEditingAddr - 1; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(2 /* RightArrow */)) && this.DataEditingAddr < mem_size - 1) { + data_editing_addr_next = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) { + // Track cursor movements + const scroll_offset = (0 | (data_editing_addr_next / this.Rows) - 0 | (data_editing_addr_backup / this.Rows)); + const scroll_desired = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + // Draw vertical separator + const window_pos = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(5 /* Border */)); + const color_text = ImGui.GetColorU32(0 /* Text */); + const color_disabled = this.OptGreyOutZeroes ? ImGui.GetColorU32(1 /* TextDisabled */) : color_text; + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) { + let addr = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + let byte_pos_x = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) { + const pos = ImGui.GetCursorScreenPos(); + let highlight_width = s.GlyphWidth * 2; + const is_next_byte_highlighted = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + if (this.DataEditingAddr === addr) { + // Display text input on current byte + let data_write = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data) { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags = 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */ | 16 /* AutoSelectAll */ | 4096 /* NoHorizontalScroll */ | 8192 /* AlwaysInsertMode */ | 256 /* CallbackAlways */; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) { + let data_input_value = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + if (this.OptShowHexII) { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + if (this.OptShowAscii) { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new imgui_2.ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + if (addr === this.DataEditingAddr) { + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(7 /* FrameBg */)); + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(40 /* TextSelectedBg */)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + if (data_next && this.DataEditingAddr < mem_size) { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) { + this.DataEditingAddr = data_editing_addr_next; + } + ImGui.Separator(); + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) + this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) + this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */)) { + // size_t goto_addr; + const goto_addr = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + if (this.GotoAddr !== -1) { + if (this.GotoAddr < mem_size) { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} +exports.MemoryEditor = MemoryEditor; +(function (MemoryEditor) { + class Sizes { + constructor() { + this.AddrDigitsCount = 0; + this.LineHeight = 0.0; + this.GlyphWidth = 0.0; + this.HexCellWidth = 0.0; + this.SpacingBetweenMidRows = 0.0; + this.PosHexStart = 0.0; + this.PosHexEnd = 0.0; + this.PosAsciiStart = 0.0; + this.PosAsciiEnd = 0.0; + this.WindowWidth = 0.0; + } + } + MemoryEditor.Sizes = Sizes; +})(MemoryEditor = exports.MemoryEditor || (exports.MemoryEditor = {})); +// #undef _PRISizeT +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfbWVtb3J5X2VkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX21lbW9yeV9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtFQUFrRTtBQUNsRSxzRUFBc0U7QUFDdEUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiw0REFBNEQ7QUFDNUQseUtBQXlLO0FBQ3pLLEVBQUU7QUFDRixTQUFTO0FBQ1QsNkdBQTZHO0FBQzdHLDRLQUE0SztBQUM1SyxFQUFFO0FBQ0YsU0FBUztBQUNULG9DQUFvQztBQUNwQyw0QkFBNEI7QUFDNUIsZ0VBQWdFO0FBQ2hFLGlCQUFpQjtBQUNqQixFQUFFO0FBQ0YsYUFBYTtBQUNiLDJCQUEyQjtBQUMzQiw4R0FBOEc7QUFDOUcsNEVBQTRFO0FBQzVFLHNIQUFzSDtBQUN0SCw2SEFBNkg7QUFDN0gsMkRBQTJEO0FBQzNELG9HQUFvRztBQUNwRywrRUFBK0U7QUFDL0UseUlBQXlJO0FBQ3pJLDhJQUE4STtBQUM5SSwyTEFBMkw7QUFDM0wsMEhBQTBIO0FBQzFILGdHQUFnRztBQUNoRyxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGFBQWE7QUFDYiw4SUFBOEk7O0FBRTlJLGVBQWU7QUFDZix3Q0FBd0M7QUFFeEMsaUNBQWlDO0FBSWpDLG1DQUF5QztBQUV6QyxtQ0FBaUM7QUFFakMsbUNBQTJDO0FBSTNDO0lBQUE7UUFFSSw0QkFBNEI7UUFFNUIsV0FBVztRQUNYLG1KQUFtSjtRQUM1SSxTQUFJLEdBQVksS0FBSyxDQUFDO1FBQzdCLDRHQUE0RztRQUNyRyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlFQUF5RTtRQUNsRSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHlFQUF5RTtRQUNsRSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUNwQyx5RUFBeUU7UUFDbEUsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDckMseUVBQXlFO1FBQ2xFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUN4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 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/imgui_demo.js b/imgui_demo.js new file mode 100644 index 0000000..eadc4c6 --- /dev/null +++ b/imgui_demo.js @@ -0,0 +1,2957 @@ +"use strict"; +// dear imgui, v1.53 +// (demo code) +Object.defineProperty(exports, "__esModule", { value: true }); +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +const imgui_4 = require("./imgui"); +const imgui_5 = require("./imgui"); +const imgui_6 = require("./imgui"); +const imgui_7 = require("./imgui"); +const imgui_8 = require("./imgui"); +const imgui_9 = require("./imgui"); +const imgui_10 = require("./imgui"); +const imgui_11 = require("./imgui"); +const imgui_12 = require("./imgui"); +const imgui_13 = require("./imgui"); +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE = "\n"; +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A, _B) { return ((_A) >= (_B)) ? (_A) : (_B); } +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) +class Static { + constructor(value) { + this.value = value; + } +} +const _static = {}; +function STATIC(key, value) { + return _static[key] || (_static[key] = new Static(value)); +} +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); +function ShowHelpMarker(desc) { + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} +function ShowUserGuide() { + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} +exports.ShowUserGuide = ShowUserGuide; +// Demonstrate most ImGui features (big function!) +function ShowDemoWindow(p_open = null) { + // Examples apps + /* static */ const show_app_main_menu_bar = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console = STATIC("show_app_console", false); + /* static */ const show_app_log = STATIC("show_app_log", false); + /* static */ const show_app_layout = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor = STATIC("show_app_style_editor", false); + /* static */ const show_app_metrics = STATIC("show_app_metrics", false); + /* static */ const show_app_about = STATIC("show_app_about", false); + if (show_app_main_menu_bar.value) + ShowExampleAppMainMenuBar(); + if (show_app_console.value) + ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) + ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) + ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) + ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) + ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) + ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) + ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) + ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) + ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) + ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + if (show_app_metrics.value) { + ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); + } + if (show_app_style_editor.value) { + ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ + ShowStyleEditor(); + ImGui.End(); + } + if (show_app_about.value) { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, 64 /* AlwaysAutoResize */); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + /* static */ const no_titlebar = STATIC("no_titlebar", false); + /* static */ const no_scrollbar = STATIC("no_scrollbar", false); + /* static */ const no_menu = STATIC("no_menu", false); + /* static */ const no_move = STATIC("no_move", false); + /* static */ const no_resize = STATIC("no_resize", false); + /* static */ const no_collapse = STATIC("no_collapse", false); + /* static */ const no_close = STATIC("no_close", false); + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags = 0; + if (no_titlebar.value) + window_flags |= 1 /* NoTitleBar */; + if (no_scrollbar.value) + window_flags |= 8 /* NoScrollbar */; + if (!no_menu.value) + window_flags |= 1024 /* MenuBar */; + if (no_move.value) + window_flags |= 4 /* NoMove */; + if (no_resize.value) + window_flags |= 2 /* NoResize */; + if (no_collapse.value) + window_flags |= 32 /* NoCollapse */; + if (no_close.value) + p_open = null; // Don't pass our bool* to Begin + ImGui.SetNextWindowSize(new imgui_6.ImVec2(550, 680), 4 /* FirstUseEver */); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + ImGui.Text(`dear imgui says hello. (${imgui_1.IMGUI_VERSION})`); + // Menu + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("Menu")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ ShowUserGuide(); + } + if (ImGui.CollapsingHeader("Window options")) { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + if (ImGui.TreeNode("Style")) { + /*ImGui.*/ ShowStyleEditor(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Capture/Logging")) { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Widgets")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const clicked = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + /* static */ const check = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + /* static */ const e = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); + ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(i / 7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr = STATIC("arr_", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + ImGui.Separator(); + ImGui.LabelText("label", "Value"); + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1 = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + // General BeginCombo() API, you have full control over your selection data and display type + const items = ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS"]; + /* static */ const current_item_2 = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) { + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(items); n++) { + const is_selected = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + { + /* static */ const str0 = STATIC("str0", new imgui_4.ImStringBuffer(128, "Hello, world!")); + /* static */ const i0 = STATIC("i0", 123); + /* static */ const f0 = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, imgui_3.IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); + ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); + ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + /* static */ const vec4a = STATIC("vec4a", [0.10, 0.20, 0.30, 0.44]); + ImGui.InputFloat3("input float3", vec4a.value); + } + { + /* static */ const i1 = STATIC("i1#415", 50), i2 = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); + ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + /* static */ const f1 = STATIC("f1#421", 1.00), f2 = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + { + /* static */ const i1 = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); + ShowHelpMarker("CTRL+click to input value."); + /* static */ const f1 = STATIC("f1#427", 0.123), f2 = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + /* static */ const col1 = STATIC("col1", [1.0, 0.0, 0.2]); + /* static */ const col2 = STATIC("col2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit4("color 2", col2.value); + const listbox_items = ["Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon"]; + /* static */ const listbox_item_current = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + /* static */ const listbox_item_current2 = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Trees")) { + if (ImGui.TreeNode("Basic trees")) { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) + console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Advanced, with Selectable nodes")) { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + /* static */ const selection_mask = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(14 /* IndentSpacing */, ImGui.GetFontSize() * 3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags = 128 /* OpenOnArrow */ | 64 /* OpenOnDoubleClick */ | ((selection_mask.value & (1 << i)) ? 1 /* Selected */ : 0); + if (i < 3) { + // Node + const node_open = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= 256 /* Leaf */ | 8 /* NoTreePushOnOpen */; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Collapsing Headers")) { + /* static */ const closable_group = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Bullets")) { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); + ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); + ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text")) { + if (ImGui.TreeNode("Colored Text")) { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new imgui_7.ImVec4(1.0, 0.0, 1.0, 1.0), "Pink"); + ImGui.TextColored(new imgui_7.ImVec4(1.0, 1.0, 0.0, 1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); + ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Word Wrapping")) { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + /* static */ const wrap_width = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + ImGui.Text("Test paragraph 1:"); + let pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("UTF-8 Text")) { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf = STATIC("buf", new imgui_4.ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Images")) { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io = ImGui.GetIO(); + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id = io.Fonts.TexID; + const my_tex_w = io.Fonts.TexWidth; + const my_tex_h = io.Fonts.TexHeight; + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(my_tex_w, my_tex_h), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + const focus_sz = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; + if (focus_x < 0.0) + focus_x = 0.0; + else if (focus_x > my_tex_w - focus_sz) + focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; + if (focus_y < 0.0) + focus_y = 0.0; + else if (focus_y > my_tex_h - focus_sz) + focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0 = new imgui_6.ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1 = new imgui_6.ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(128, 128), uv0, uv1, new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); + let frame_padding = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new imgui_6.ImVec2(32, 32), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(32.0 / my_tex_w, 32 / my_tex_h), frame_padding, new imgui_7.ImVec4(0, 0, 0, 1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Selectables")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const selected = STATIC("selected#672", [false, true, false, false]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], 4 /* AllowDoubleClick */)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) { + /* static */ const selected = STATIC("selected#687", [false, false, false]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); + ImGui.SameLine(300); + ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) { + ImGui.Columns(3, null, false); + /* static */ const selected = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) { + const label = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) { + /* static */ const selected = STATIC("selected#712", [true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true]); + for (let i = 0; i < 16; i++) { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new imgui_6.ImVec2(50, 50))) { + let x = i % 4, y = i / 4; + if (x > 0) + selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) + selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) + selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) + selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) + ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Filtered Text Input")) { + /* static */ const buf1 = STATIC("buf1", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("default", buf1.value, imgui_3.IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2 = STATIC("buf2", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("decimal", buf2.value, imgui_3.IM_ARRAYSIZE(buf2.value), 1 /* CharsDecimal */); + /* static */ const buf3 = STATIC("buf3", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("hexadecimal", buf3.value, imgui_3.IM_ARRAYSIZE(buf3.value), 2 /* CharsHexadecimal */ | 4 /* CharsUppercase */); + /* static */ const buf4 = STATIC("buf4", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("uppercase", buf4.value, imgui_3.IM_ARRAYSIZE(buf4.value), 4 /* CharsUppercase */); + /* static */ const buf5 = STATIC("buf5", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("no blank", buf5.value, imgui_3.IM_ARRAYSIZE(buf5.value), 8 /* CharsNoBlank */); + class TextFilters { + static FilterImGuiLetters(data) { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) + return 0; return 1; } + } + /* static */ const buf6 = STATIC("buf6", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("\"imgui\" letters", buf6.value, imgui_3.IM_ARRAYSIZE(buf6.value), 512 /* CallbackCharFilter */, TextFilters.FilterImGuiLetters); + ImGui.Text("Password input"); + /* static */ const bufpass = STATIC("bufpass", new imgui_4.ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 32768 /* Password */ | 8 /* CharsNoBlank */); + ImGui.SameLine(); + ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 8 /* CharsNoBlank */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-line Text Input")) { + /* static */ const read_only = STATIC("read_only", false); + /* static */ const text = STATIC("text", new imgui_4.ImStringBuffer(1024 * 16, "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, imgui_3.IM_ARRAYSIZE(text.value), new imgui_6.ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), 1024 /* AllowTabInput */ | (read_only.value ? 16384 /* ReadOnly */ : 0)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Plots widgets")) { + /* static */ const animate = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + /* static */ const arr = STATIC("arr", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + ImGui.PlotLines_Array("Frame Times", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset = STATIC("values_offset", 0); + /* static */ const refresh_time = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) { + /* static */ const phase = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value + 1) % imgui_3.IM_ARRAYSIZE(values.value); + phase.value += 0.10 * values_offset.value; + refresh_time.value += 1.0 / 60.0; + } + ImGui.PlotLines_Array("Lines", values.value, imgui_3.IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, imgui_3.IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new imgui_6.ImVec2(0, 80)); + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs { + static Sin(data, i) { return Math.sin(i * 0.1); } + static Saw(data, i) { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type = STATIC("func_type", 0), display_count = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); + ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.Separator(); + // Animate a simple progress bar + /* static */ const progress = STATIC("progress", 0.0), progress_dir = STATIC("progress_dir", 1.0); + if (animate.value) { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { + progress.value = +1.1; + progress_dir.value *= -1.0; + } + if (progress.value <= -0.1) { + progress.value = -0.1; + progress_dir.value *= -1.0; + } + } + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0.0, 0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + const progress_saturated = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf = `${(progress_saturated * 1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0., 0.), buf); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Color/Picker Widgets")) { + /* static */ const color = STATIC("color#863", new imgui_9.ImColor(114, 144, 154, 200).toImVec4()); + /* static */ const hdr = STATIC("hdr", false); + /* static */ const alpha_preview = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview = STATIC("alpha_half_preview", false); + /* static */ const options_menu = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); + ImGui.SameLine(); + ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); + ImGui.SameLine(); + ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags = (hdr.value ? 4096 /* HDR */ : 0) | (alpha_half_preview.value ? 2048 /* AlphaPreviewHalf */ : (alpha_preview.value ? 1024 /* AlphaPreview */ : 0)) | (options_menu.value ? 0 : 8 /* NoOptions */); + ImGui.Text("Color widget:"); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, 16384 /* HSV */ | misc_flags); + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, 131072 /* Float */ | misc_flags); + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); + ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, 32 /* NoInputs */ | 128 /* NoLabel */ | misc_flags); + ImGui.Text("Color button with Custom Picker Popup:"); + // Generate a dummy palette + /* static */ const saved_palette_inited = STATIC("saved_palette_inited", false); + /* static */ const saved_palette = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) { + saved_palette.value[n] = new imgui_7.ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r = [0.0]; + const g = [0.0]; + const b = [0.0]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + /* static */ const backup_color = STATIC("backup_color", new imgui_7.ImVec4()); + let open_popup = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | 256 /* NoSidePreview */ | 16 /* NoSmallPreview */); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(saved_palette.value); n++) { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], 2 /* NoAlpha */ | 4 /* NoPicker */ | 64 /* NoTooltip */, new imgui_6.ImVec2(20, 20))) + color.value.Copy(new imgui_7.ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + if (ImGui.BeginDragDropTarget()) { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new imgui_6.ImVec2(80, 80)); + ImGui.Text("Color picker:"); + /* static */ const alpha = STATIC("alpha", true); + /* static */ const alpha_bar = STATIC("alpha_bar", true); + /* static */ const side_preview = STATIC("side_preview", true); + /* static */ const ref_color = STATIC("ref_color", false); + /* static */ const ref_color_v = STATIC("ref_color_v", new imgui_7.ImVec4(1.0, 0.0, 1.0, 0.5)); + /* static */ const inputs_mode = STATIC("inputs_mode", 2); + /* static */ const picker_mode = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, 32 /* NoInputs */ | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); + ShowHelpMarker("User can right-click the picker to change mode."); + let flags = misc_flags; + if (!alpha.value) + flags |= 2 /* NoAlpha */; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) + flags |= 512 /* AlphaBar */; + if (!side_preview.value) + flags |= 256 /* NoSidePreview */; + if (picker_mode.value === 1) + flags |= 262144 /* PickerHueBar */; + if (picker_mode.value === 2) + flags |= 524288 /* PickerHueWheel */; + if (inputs_mode.value === 1) + flags |= 32 /* NoInputs */; + if (inputs_mode.value === 2) + flags |= 8192 /* RGB */; + if (inputs_mode.value === 3) + flags |= 16384 /* HSV */; + if (inputs_mode.value === 4) + flags |= 32768 /* HEX */; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); + ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(65536 /* Uint8 */ | 16384 /* HSV */); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(131072 /* Float */ | 8192 /* RGB */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Range Widgets")) { + /* static */ const begin = STATIC("begin", 10), end = STATIC("end", 90); + /* static */ const begin_i = STATIC("begin_i", 100), end_i = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-component Widgets")) { + /* static */ const vec4f = STATIC("vec4f", [0.10, 0.20, 0.30, 0.44]); + /* static */ const vec4i = STATIC("vec4i", [1, 5, 100, 255]); + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Vertical Sliders")) { + const spacing = 4; + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(spacing, spacing)); + /* static */ const int_value = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new imgui_6.ImVec2(18, 160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + /* static */ const values = STATIC("values#1072", [0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(7 /* FrameBg */, imgui_9.ImColor.HSV(i / 7.0, 0.5, 0.5)); + ImGui.PushStyleColor(8 /* FrameBgHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.5)); + ImGui.PushStyleColor(9 /* FrameBgActive */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.5)); + ImGui.PushStyleColor(19 /* SliderGrab */, imgui_9.ImColor.HSV(i / 7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(18, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2 = STATIC("values2", [0.20, 0.80, 0.40, 0.25]); + const rows = 3; + const small_slider_size = new imgui_6.ImVec2(18, (160.0 - (rows - 1) * spacing) / rows); + for (let nx = 0; nx < 4; nx++) { + if (nx > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) { + ImGui.PushID(nx * rows + ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(15 /* GrabMinSize */, 40); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(40, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Layout")) { + if (ImGui.TreeNode("Child regions")) { + /* static */ const disable_mouse_wheel = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + ImGui.Text("Without border"); + /* static */ const line = STATIC("line", 50); + let goto_line = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, 32 /* EnterReturnsTrue */) || goto_line; + ImGui.PopItemWidth(); + ImGui.BeginChild("Sub1", new imgui_6.ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5, 300), false, 2048 /* HorizontalScrollbar */ | (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + for (let i = 0; i < 100; i++) { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + ImGui.SameLine(); + ImGui.PushStyleVar(5 /* ChildRounding */, 5.0); + ImGui.BeginChild("Sub2", new imgui_6.ImVec2(0, 300), true, (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) { + if (i === 50) + ImGui.NextColumn(); + const buf = `${("00000000" + (i * 5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new imgui_6.ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Widgets Width")) { + /* static */ const f = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); + ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Basic Horizontal Layout")) { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + // Text + ImGui.Text("Two items: Hello"); + ImGui.SameLine(); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Adjust spacing + ImGui.Text("More spacing: Hello"); + ImGui.SameLine(0, 20); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); + ImGui.SameLine(); + ImGui.Button("Banana"); + ImGui.SameLine(); + ImGui.Button("Apple"); + ImGui.SameLine(); + ImGui.Button("Corniflower"); + // Button + ImGui.Text("Small buttons"); + ImGui.SameLine(); + ImGui.SmallButton("Like this one"); + ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.Text("x=150"); + ImGui.SameLine(300); + ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.SmallButton("x=150"); + ImGui.SameLine(300); + ImGui.SmallButton("x=300"); + // Checkbox + /* static */ const c1 = STATIC("c1", false), c2 = STATIC("c2", false), c3 = STATIC("c3", false), c4 = STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + // Various + /* static */ const f0 = STATIC("f0#1255", 1.0), f1 = STATIC("f1#1255", 2.0), f2 = STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items = ["AAAA", "BBBB", "CCCC", "DDDD"]; + /* static */ const item = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0, 5.0); + ImGui.PopItemWidth(); + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection = STATIC("selection", [0, 1, 2, 3]); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + // Dummy + const sz = new imgui_6.ImVec2(30, 30); + ImGui.Button("A", sz); + ImGui.SameLine(); + ImGui.Dummy(sz); + ImGui.SameLine(); + ImGui.Button("B", sz); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Groups")) { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size = ImGui.GetItemRectSize(); + const values = [0.5, 0.20, 0.80, 0.60, 0.25]; + ImGui.PlotHistogram_Array("##values", values, imgui_3.IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + ImGui.Button("ACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text Baseline Alignment")) { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + ImGui.Text("One\nTwo\nThree"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + ImGui.Button("HOP##1"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("HOP##2"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("TEST##1"); + ImGui.SameLine(); + ImGui.Text("TEST"); + ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); + ImGui.SameLine(); + ImGui.Button("Widget##1"); + ImGui.SameLine(); + ImGui.Text("Widget"); + ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); + ImGui.SameLine(); + ImGui.Button("Widget##3"); + // Tree + const spacing = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##2"); + if (node_open) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##4"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Scrolling")) { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track = STATIC("track", true); + /* static */ const track_line = STATIC("track_line", 50), scroll_to_px = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); + track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); + scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) + track.value = false; + for (let i = 0; i < 5; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new imgui_6.ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) { + if (track.value && line === track_line.value) { + ImGui.TextColored(new imgui_9.ImColor(255, 255, 0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y = ImGui.GetScrollY(), scroll_max_y = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.Bullet(); + ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); + ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(10 /* FrameRounding */, 3.0); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, ImGui.GetFrameHeightWithSpacing() * 7 + 30), true, 2048 /* HorizontalScrollbar */); + for (let line = 0; line < lines.value; line++) { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) { + if (n > 0) + ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf = n.toFixed(0); + const label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; + const hue = n * 0.05; + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new imgui_6.ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x = ImGui.GetScrollX(), scroll_max_x = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta = 0.0; + ImGui.SmallButton("<<"); + if (ImGui.IsItemActive()) + scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text("Scroll from code"); + ImGui.SameLine(); + ImGui.SmallButton(">>"); + if (ImGui.IsItemActive()) + scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Clipping")) { + /* static */ const size = STATIC("size", new imgui_6.ImVec2(100, 100)), offset = STATIC("offset", new imgui_6.ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos = ImGui.GetCursorScreenPos(); + const clip_rect = new imgui_7.ImVec4(pos.x, pos.y, pos.x + size.value.x, pos.y + size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { + offset.value.x += ImGui.GetIO().MouseDelta.x; + offset.value.y += ImGui.GetIO().MouseDelta.y; + } + ImGui.GetWindowDrawList().AddRectFilled(pos, new imgui_6.ImVec2(pos.x + size.value.x, pos.y + size.value.y), imgui_8.IM_COL32(90, 90, 120, 255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize() * 2.0, new imgui_6.ImVec2(pos.x + offset.value.x, pos.y + offset.value.y), imgui_8.IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Popups & Modal windows")) { + if (ImGui.TreeNode("Popups")) { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + /* static */ const selected_fish = STATIC("selected_fish", -1); + const names = ["Bream", "Haddock", "Mackerel", "Pollock", "Tilefish"]; + /* static */ const toggles = STATIC("toggles", [true, false, false, false, false]); + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Context menus")) { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) { + if (ImGui.Selectable("Set to zero")) + value.value = 0.0; + if (ImGui.Selectable("Set to PI")) + value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + /* static */ const name = STATIC("name", new imgui_4.ImStringBuffer(32, "Label1")); + const buf = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, imgui_3.IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); + ImGui.Text("(<-- right-click here)"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Modals")) { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, 64 /* AlwaysAutoResize */)) { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + /* static */ const dont_ask_me_next_time = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + if (ImGui.Button("OK", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color = STATIC("color#2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Menus inside a regular window")) { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Columns")) { + ImGui.PushID("Columns"); + // Basic columns + if (ImGui.TreeNode("Basic")) { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) { + const label = `Item ${n}`; + if (ImGui.Selectable(label)) { } + if (ImGui.Button(label, new imgui_6.ImVec2(-1, 0))) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); + ImGui.NextColumn(); + ImGui.Text("Name"); + ImGui.NextColumn(); + ImGui.Text("Path"); + ImGui.NextColumn(); + ImGui.Text("Hovered"); + ImGui.NextColumn(); + ImGui.Separator(); + const names = ["One", "Two", "Three"]; + const paths = ["/path/one", "/path/two", "/path/three"]; + /* static */ const selected = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) { + const label = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, 2 /* SpanAllColumns */)) + selected.value = i; + const hovered = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); + ImGui.NextColumn(); + ImGui.Text(paths[i]); + ImGui.NextColumn(); + ImGui.Text(`${hovered}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category A")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Borders")) { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders = STATIC("h_borders", true); + /* static */ const v_borders = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4 * 3; i++) { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.SetNextWindowContentSize(new imgui_6.ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 20), false, 2048 /* HorizontalScrollbar */); + ImGui.Columns(10); + const ITEMS_COUNT = 2000; + const clipper = new imgui_13.ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + const node_open = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); + ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { + ImGui.BulletText("Sailor"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { + ImGui.BulletText("Marin"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + if (ImGui.CollapsingHeader("Filtering")) { + /* static */ const filter = STATIC("filter#1864", new imgui_11.ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines = ["aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world"]; + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + if (ImGui.CollapsingHeader("Inputs & Focus")) { + const io = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); + ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + if (ImGui.TreeNode("Keyboard & Mouse State")) { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (io.MouseDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Mouse clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse dbl-clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseDoubleClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse released:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseReleased(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + ImGui.Text("Keys down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (io.KeysDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Keys pressed:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyPressed(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text("Keys release:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyReleased(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Tabbing")) { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf = STATIC("buf1#1921", new imgui_4.ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focus from code")) { + const focus_1 = ImGui.Button("Focus on 1"); + ImGui.SameLine(); + const focus_2 = ImGui.Button("Focus on 2"); + ImGui.SameLine(); + const focus_3 = ImGui.Button("Focus on 3"); + let has_focus = 0; + /* static */ const buf = STATIC("buf2#1944", new imgui_4.ImStringBuffer(128, "click on a button to set focus")); + if (focus_1) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 1; + if (focus_2) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 2; + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focused & Hovered Test")) { + /* static */ const embed_all_inside_a_child_window = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 25), true); + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(1 /* ChildWindows */)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(2 /* RootWindow */)}\n`); + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(1 /* ChildWindows */)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(2 /* RootWindow */)}\n"`); + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText(`IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(32 /* AllowWhenOverlapped */)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(52 /* RectOnly */)}\n`); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Dragging")) { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) { + // Draw a line between the button and the mouse cursor + const draw_list = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[21 /* Button */]), 4.0); + draw_list.PopClipRect(); + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold = ImGui.GetMouseDragDelta(0); + const mouse_delta = io.MouseDelta; + ImGui.SameLine(); + ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Mouse cursors")) { + const mouse_cursors_names = ["Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE"]; + imgui_2.IM_ASSERT(imgui_3.IM_ARRAYSIZE(mouse_cursors_names) === 7 /* COUNT */); + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); + ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < 7 /* COUNT */; i++) { + const label = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); + ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + ImGui.End(); +} +exports.ShowDemoWindow = ShowDemoWindow; +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +function ShowStyleSelector(label) { + /* static */ const style_idx = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) { + switch (style_idx.value) { + case 0: + ImGui.StyleColorsClassic(); + break; + case 1: + ImGui.StyleColorsDark(); + break; + case 2: + ImGui.StyleColorsLight(); + break; + } + return true; + } + return false; +} +exports.ShowStyleSelector = ShowStyleSelector; +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +function ShowFontSelector(label) { + const io = ImGui.GetIO(); + const font_current = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker("- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} +exports.ShowFontSelector = ShowFontSelector; +function ShowStyleEditor(ref = null) { + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style = ImGui.GetStyle(); + /* static */ const ref_saved_style = STATIC("ref_saved_style", new imgui_10.ImGuiStyle()); + // Default to using internal storage as reference + /* static */ const init = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + if (ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ ShowFontSelector("Fonts##Selector"); + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { + let window_border = (style.WindowBorderSize > 0.0); + if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) + style.WindowBorderSize = window_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let frame_border = (style.FrameBorderSize > 0.0); + if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) + style.FrameBorderSize = frame_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let popup_border = (style.PopupBorderSize > 0.0); + if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) + style.PopupBorderSize = popup_border ? 1.0 : 0.0; + } + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + if (ImGui.TreeNode("Rendering")) { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); + ImGui.SameLine(); + ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) + style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Settings")) { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); + ImGui.SameLine(); + ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Colors")) { + /* static */ const output_dest = STATIC("output_dest", 0); + /* static */ const output_only_modified = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < 43 /* COUNT */; i++) { + const col = style.Colors[i]; + const name = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); + ImGui.PushItemWidth(120); + ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + /* static */ const filter = STATIC("filter#2223", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + /* static */ const alpha_flags = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, 1024 /* AlphaPreview */); + ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, 2048 /* AlphaPreviewHalf */); + ImGui.BeginChild("#colors", new imgui_6.ImVec2(0, 300), true, 16384 /* AlwaysVerticalScrollbar */ | 32768 /* AlwaysHorizontalScrollbar */); + ImGui.PushItemWidth(-160); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], 512 /* AlphaBar */ | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Save")) + ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Revert")) + style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + ImGui.TreePop(); + } + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened = ImGui.TreeNode("Fonts"); + if (fonts_opened) { + const atlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) { + ImGui.Image(atlas.TexID, new imgui_6.ImVec2(atlas.TexWidth, atlas.TexHeight), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_9.ImColor(255, 255, 255, 255).Value, new imgui_9.ImColor(255, 255, 255, 128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + ImGui.PopItemWidth(); +} +exports.ShowStyleEditor = ShowStyleEditor; +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar() { + if (ImGui.BeginMainMenuBar()) { + if (ImGui.BeginMenu("File")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) { + if (ImGui.MenuItem("Undo", "CTRL+Z")) { } + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) { } // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) { } + if (ImGui.MenuItem("Copy", "CTRL+C")) { } + if (ImGui.MenuItem("Paste", "CTRL+V")) { } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} +function ShowExampleMenuFile() { + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) { } + if (ImGui.MenuItem("Open", "Ctrl+O")) { } + if (ImGui.BeginMenu("Open Recent")) { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) { } + if (ImGui.MenuItem("Save As..")) { } + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) { + /* static */ const enabled = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f = STATIC("f#2408", 0.5); + /* static */ const n = STATIC("n", 0); + /* static */ const b = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) { + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) { + imgui_2.IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) { } + if (ImGui.MenuItem("Quit", "Alt+F4")) { } +} +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open) { + if (!ImGui.Begin("Example: Auto-resizing window", p_open, 64 /* AlwaysAutoResize */)) { + ImGui.End(); + return; + } + /* static */ const lines = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open) { + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static Square(data) { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + static Step(data) { + const step = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + /* static */ const auto_resize = STATIC("auto_resize", false); + /* static */ const type = STATIC("type", 0); + /* static */ const display_lines = STATIC("display_lines", 10); + if (type.value === 0) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 0), new imgui_6.ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, -1), new imgui_6.ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(100, 100), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(400, -1), new imgui_6.ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 400), new imgui_6.ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100); // Fixed Step + const flags = auto_resize.value ? 64 /* AlwaysAutoResize */ : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) { + const desc = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(200, 200)); + } + ImGui.SameLine(); + if (ImGui.Button("500x500")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(500, 500)); + } + ImGui.SameLine(); + if (ImGui.Button("800x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(800, 200)); + } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, imgui_3.IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open) { + const DISTANCE = 10.0; + /* static */ const corner = STATIC("corner", 0); + const window_pos = new imgui_6.ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot = new imgui_6.ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, 1 /* Always */, window_pos_pivot); + ImGui.PushStyleColor(2 /* WindowBg */, new imgui_7.ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, 1 /* NoTitleBar */ | 2 /* NoResize */ | 64 /* AlwaysAutoResize */ | 4 /* NoMove */ | 256 /* NoSavedSettings */)) { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) + corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) + corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) + corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) + corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open) { + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 100), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 200), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf = `Animated title ${"|/-\\".charAt((ImGui.GetTime() / 0.25) & 3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 300), 4 /* FirstUseEver */); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(350, 560), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Custom rendering", p_open)) { + ImGui.End(); + return; + } + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list = ImGui.GetWindowDrawList(); + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz = STATIC("sz", 36.0); + /* static */ const col = STATIC("color#2583", new imgui_7.ImVec4(1.0, 1.0, 0.4, 1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value); + { + const p = ImGui.GetCursorScreenPos(); + const col32 = imgui_8.IM_COL32(col.value.x * 255, col.value.y * 255, col.value.z * 255, col.value.w * 255); + let x = p.x + 4.0, y = p.y + 4.0, spacing = 8.0; + for (let n = 0; n < 2; n++) { + const thickness = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 20, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 0.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */, thickness); + x += sz.value + spacing; + draw_list.AddTriangle(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x, y + sz.value), col32, thickness); + x += spacing; + draw_list.AddBezierCurve(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value * 1.3, y + sz.value * 0.3), new imgui_6.ImVec2(x + sz.value - sz.value * 1.3, y + sz.value - sz.value * 0.3), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x = p.x + 4; + y += sz.value + spacing; + } + draw_list.AddCircleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */); + x += sz.value + spacing; + draw_list.AddTriangleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32); + x += sz.value + spacing; + draw_list.AddRectFilledMultiColor(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), imgui_8.IM_COL32(0, 0, 0), imgui_8.IM_COL32(255, 0, 0), imgui_8.IM_COL32(255, 255, 0), imgui_8.IM_COL32(0, 255, 0)); + ImGui.Dummy(new imgui_6.ImVec2((sz.value + spacing) * 8, (sz.value + spacing) * 3)); + } + ImGui.Separator(); + { + /* static */ const points = STATIC("points", new imgui_5.ImVector()); + /* static */ const adding_line = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) + points.value.clear(); + if (points.value.Size >= 2) { + ImGui.SameLine(); + if (ImGui.Button("Undo")) { + points.value.pop_back(); + points.value.pop_back(); + } + } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) + canvas_size.x = 50.0; + if (canvas_size.y < 50.0) + canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(50, 50, 50), imgui_8.IM_COL32(50, 50, 60), imgui_8.IM_COL32(60, 60, 70), imgui_8.IM_COL32(50, 50, 60)); + draw_list.AddRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(255, 255, 255)); + let adding_preview = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas = new imgui_6.ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) { + if (!adding_line.value && ImGui.IsMouseClicked(0)) { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i + 1].x, canvas_pos.y + points.value.Data[i + 1].y), imgui_8.IM_COL32(255, 255, 0, 255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + constructor() { + // char InputBuf[256]; + this.InputBuf = new imgui_4.ImStringBuffer(256, ""); + // ImVector Items; + this.Items = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + // ImVector History; + this.History = new imgui_5.ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + this.HistoryPos = -1; + // ImVector Commands; + this.Commands = new imgui_5.ImVector(); + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + delete() { } + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + ClearLog() { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + // void Draw(const char* title, bool* p_open) + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin(title, p_open)) { + ImGui.End(); + return; + } + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + // TODO: display items starting from the bottom + if (ImGui.SmallButton("Add Dummy Text")) { + this.AddLog(`${this.Items.Size} some text`); + this.AddLog("some more text"); + this.AddLog("display very important message here!"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { + this.AddLog("[error] something went wrong"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { + this.ClearLog(); + } + ImGui.SameLine(); + const copy_to_clipboard = ImGui.SmallButton("Copy"); + ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) + this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + ImGui.Separator(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + /* static */ const filter = STATIC("filter#2763", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + const footer_height_to_reserve = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new imgui_6.ImVec2(0, -footer_height_to_reserve), false, 2048 /* HorizontalScrollbar */); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.Selectable("Clear")) + this.ClearLog(); + ImGui.EndPopup(); + } + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(4, 1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) { + // const char* item = Items[i]; + const item = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col = new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) + col = new imgui_7.ImVec4(1.0, 0.4, 0.4, 1.0); + else if (/^# /.test(item)) + col = new imgui_7.ImVec4(1.0, 0.78, 0.58, 1.0); + ImGui.PushStyleColor(0 /* Text */, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + // Command-line + if (ImGui.InputText("Input", this.InputBuf, imgui_3.IM_ARRAYSIZE(this.InputBuf), 32 /* EnterReturnsTrue */ | 64 /* CallbackCompletion */ | 128 /* CallbackHistory */, ExampleAppConsole.TextEditCallbackStub, this)) { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(3 /* RootAndChildWindows */) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + ImGui.End(); + } + // void ExecCommand(const char* command_line) + ExecCommand(command_line) { + this.AddLog(`# ${command_line}\n`); + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size - 1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") { + this.ClearLog(); + } + else if (command_line.toUpperCase() === "HELP") { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + else if (command_line.toUpperCase() === "HISTORY") { + const first = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data) { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console = data.UserData; + return console.TextEditCallback(data); + } + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data) { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) { + case 64 /* CallbackCompletion */: + { + // Example of TEXT COMPLETION + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + break; + } + case 128 /* CallbackHistory */: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} +function ShowExampleAppConsole(p_open) { + /* static */ const console = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog { + constructor() { + // ImGuiTextBuffer Buf; + this.Buf = new imgui_12.ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + this.Filter = new imgui_11.ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + this.LineOffsets = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + } + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear() { this.Buf.clear(); this.LineOffsets.clear(); } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + let old_size = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 400), 4 /* FirstUseEver */); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) + this.Clear(); + ImGui.SameLine(); + const copy = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, 0), false, 2048 /* HorizontalScrollbar */); + if (copy) + ImGui.LogToClipboard(); + if (this.Filter.IsActive()) { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else { + ImGui.TextUnformatted(this.Buf.begin()); + } + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open) { + /* static */ const log = STATIC("log#3073", new ExampleAppLog()); + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time = STATIC("last_time", -1.0); + const time = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) { + const random_words = ["system", "info", "warning", "error", "fatal", "notice", "log"]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * imgui_3.IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + log.value.Draw("Example: Log", p_open); +} +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 440), 4 /* FirstUseEver */); + if (ImGui.Begin("Example: Layout", p_open, 1024 /* MenuBar */)) { + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("File")) { + if (ImGui.MenuItem("Close")) + p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + // left + /* static */ const selected = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new imgui_6.ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) { + const label = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new imgui_6.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) { } + ImGui.SameLine(); + if (ImGui.Button("Save")) { } + ImGui.EndGroup(); + } + ImGui.End(); +} +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(430, 450), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Property editor", p_open)) { + ImGui.End(); + return; + } + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2, 2)); + ImGui.Columns(2); + ImGui.Separator(); + class funcs { + static ShowDummyObject(prefix, uid) { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) { + /* static */ const dummy_members = STATIC("dummy_members", [0.0, 0.0, 1.0, 3.1416, 100.0, 999.0]); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) { + funcs.ShowDummyObject("Child", 424242); + } + else { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref = [dummy_members.value[i] || 0]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Long text display", p_open)) { + ImGui.End(); + return; + } + /* static */ const test_type = STATIC("test_type", 0); + /* static */ const log = STATIC("log#3217", new imgui_12.ImGuiTextBuffer()); + /* static */ const lines = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { + log.value.clear(); + lines.value = 0; + } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value + i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + const clipper = new imgui_13.ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} +// End of Demo code +// #else +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} +// #endif +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2RlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQixjQUFjOztBQUVkLGlHQUFpRztBQUNqRyxzSUFBc0k7QUFDdEksdUdBQXVHO0FBQ3ZHLGdKQUFnSjtBQUNoSiwwSkFBMEo7QUFDMUosMEZBQTBGO0FBQzFGLHNLQUFzSztBQUN0Syx3SEFBd0g7QUFDeEgsYUFBYTtBQUNiLCtEQUErRDtBQUUvRCxzSkFBc0o7QUFDdEosaUpBQWlKO0FBQ2pKLHNJQUFzSTtBQUN0SSw0SkFBNEo7QUFDNUosa0tBQWtLO0FBRWxLLDZEQUE2RDtBQUM3RCxrQ0FBa0M7QUFDbEMsU0FBUztBQUVULHFCQUFxQjtBQUNyQixrREFBa0Q7QUFDbEQsd0VBQXdFO0FBQ3hFLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsb0VBQW9FO0FBQ3BFLDBDQUEwQztBQUMxQyxRQUFRO0FBQ1IsMENBQTBDO0FBQzFDLFNBQVM7QUFFVCxpQ0FBaUM7QUFDakMsbUNBQXdDO0FBQ3hDLG1DQUFvQztBQUNwQyxtQ0FBdUM7QUFDdkMsbUNBQXlDO0FBcUJ6QyxtQ0FBbUM7QUFDbkMsbUNBQW1EO0FBQ25ELG1DQUFtRDtBQUNuRCxtQ0FBbUM7QUFDbkMsbUNBQWtDO0FBRWxDLG9DQUFxQztBQUVyQyxvQ0FBMEM7QUFDMUMsb0NBQTBDO0FBQzFDLG9DQUEyQztBQUkzQyxrQkFBa0I7QUFDbEIsa0lBQWtJO0FBQ2xJLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLCtKQUErSjtBQUMvSixzTUFBc007QUFDdE0sZ0lBQWdJO0FBQ2hJLDhIQUE4SDtBQUM5SCx3VEFBd1Q7QUFDeFQsMkNBQTJDO0FBQzNDLHFJQUFxSTtBQUNySSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLDZIQUE2SDtBQUM3SCw0SUFBNEk7QUFDNUksNkpBQTZKO0FBQzdKLG1JQUFtSTtBQUNuSSxzQkFB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QUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzlMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUMzQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUss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LEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2hILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxD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QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQy9NLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxD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QUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzdJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzlJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQ0FBb0QsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUM3SyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxF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QUFFLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSx1REFBdUQ7UUFDMUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/imgui_demo.ts b/imgui_demo.ts new file mode 100644 index 0000000..c7fe652 --- /dev/null +++ b/imgui_demo.ts @@ -0,0 +1,3151 @@ +// dear imgui, v1.53 +// (demo code) + +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) + +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. + +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif + +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif + +import * as ImGui from "./imgui"; +import { IMGUI_VERSION } from "./imgui"; +import { IM_ASSERT } from "./imgui"; +import { IM_ARRAYSIZE } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImAccess } from "./imgui"; +import { ImScalar } from "./imgui"; +import { ImTuple2 } from "./imgui"; +import { ImTuple3 } from "./imgui"; +import { ImTuple4 } from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiColorEditFlags } from "./imgui"; +import { ImGuiCond } from "./imgui"; +import { ImGuiFocusedFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImGuiInputTextFlags } from "./imgui" +import { ImGuiMouseCursor } from "./imgui"; +import { ImGuiSelectableFlags } from "./imgui"; +import { ImGuiStyleVar } from "./imgui"; +import { ImGuiTreeNodeFlags } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; +import { ImGuiSizeConstraintCallbackData } from "./imgui"; +import { ImDrawCornerFlags } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVector } from "./imgui"; +import { interface_ImVec2, ImVec2 } from "./imgui"; +import { interface_ImVec4, ImVec4 } from "./imgui"; +import { IM_COL32 } from "./imgui"; +import { ImColor } from "./imgui"; +import { ImGuiIO } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextFilter } from "./imgui"; +import { ImGuiTextBuffer } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImFont } from "./imgui"; +import { ImFontAtlas } from "./imgui"; + +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif + +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE: string = "\n"; + +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A: number, _B: number): number { return ((_A) >= (_B)) ? (_A) : (_B); } + +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- + +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif + +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) + +class Static { + constructor(public value: T) {} +} + +const _static: {[key: string]: Static} = {}; + +function STATIC(key: string, value: T): Static { + return _static[key] || (_static[key] = new Static(value)); +} + +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); + +function ShowHelpMarker(desc: string): void +{ + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} + +export function ShowUserGuide(): void +{ + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} + +// Demonstrate most ImGui features (big function!) +export function ShowDemoWindow(p_open: ImAccess | ImScalar | null = null): void +{ + // Examples apps + /* static */ const show_app_main_menu_bar: Static = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console: Static = STATIC("show_app_console", false); + /* static */ const show_app_log: Static = STATIC("show_app_log", false); + /* static */ const show_app_layout: Static = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor: Static = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text: Static = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize: Static = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize: Static = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay: Static = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles: Static = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering: Static = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor: Static = STATIC("show_app_style_editor", false); + + /* static */ const show_app_metrics: Static = STATIC("show_app_metrics", false); + /* static */ const show_app_about: Static = STATIC("show_app_about", false); + + if (show_app_main_menu_bar.value) ShowExampleAppMainMenuBar(); + if (show_app_console.value) ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + + if (show_app_metrics.value) { ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); } + if (show_app_style_editor.value) { ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ShowStyleEditor(); ImGui.End(); } + if (show_app_about.value) + { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + + /* static */ const no_titlebar: Static = STATIC("no_titlebar", false); + /* static */ const no_scrollbar: Static = STATIC("no_scrollbar", false); + /* static */ const no_menu: Static = STATIC("no_menu", false); + /* static */ const no_move: Static = STATIC("no_move", false); + /* static */ const no_resize: Static = STATIC("no_resize", false); + /* static */ const no_collapse: Static = STATIC("no_collapse", false); + /* static */ const no_close: Static = STATIC("no_close", false); + + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags: ImGui.WindowFlags = 0; + if (no_titlebar.value) window_flags |= ImGuiWindowFlags.NoTitleBar; + if (no_scrollbar.value) window_flags |= ImGuiWindowFlags.NoScrollbar; + if (!no_menu.value) window_flags |= ImGuiWindowFlags.MenuBar; + if (no_move.value) window_flags |= ImGuiWindowFlags.NoMove; + if (no_resize.value) window_flags |= ImGuiWindowFlags.NoResize; + if (no_collapse.value) window_flags |= ImGuiWindowFlags.NoCollapse; + if (no_close.value) p_open = null; // Don't pass our bool* to Begin + + ImGui.SetNextWindowSize(new ImVec2(550,680), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) + { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + + ImGui.Text(`dear imgui says hello. (${IMGUI_VERSION})`); + + // Menu + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("Menu")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) + { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) + { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) + { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ShowUserGuide(); + } + + if (ImGui.CollapsingHeader("Window options")) + { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + + if (ImGui.TreeNode("Style")) + { + /*ImGui.*/ShowStyleEditor(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Capture/Logging")) + { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Widgets")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const clicked: Static = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) + { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + + /* static */ const check: Static = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + + /* static */ const e: Static = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(i/7.0, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(i/7.0, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(i/7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr: Static = STATIC("arr_", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + + ImGui.Separator(); + + ImGui.LabelText("label", "Value"); + + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1: Static = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + + // General BeginCombo() API, you have full control over your selection data and display type + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" ]; + /* static */ const current_item_2: Static = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) // The second parameter is the label previewed before opening the combo. + { + for (let n = 0; n < IM_ARRAYSIZE(items); n++) + { + const is_selected: boolean = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + + { + /* static */ const str0: Static = STATIC("str0", new ImStringBuffer(128, "Hello, world!")); + /* static */ const i0: Static = STATIC("i0", 123); + /* static */ const f0: Static = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + + /* static */ const vec4a: Static> = STATIC>("vec4a", [ 0.10, 0.20, 0.30, 0.44 ]); + ImGui.InputFloat3("input float3", vec4a.value); + } + + { + /* static */ const i1: Static = STATIC("i1#415", 50), i2: Static = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + + /* static */ const f1: Static = STATIC("f1#421", 1.00), f2: Static = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + + { + /* static */ const i1: Static = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); ShowHelpMarker("CTRL+click to input value."); + + /* static */ const f1: Static = STATIC("f1#427", 0.123), f2: Static = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle: Static = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + + /* static */ const col1: Static> = STATIC>("col1", [ 1.0,0.0,0.2 ]); + /* static */ const col2: Static> = STATIC>("col2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + + ImGui.ColorEdit4("color 2", col2.value); + + const listbox_items: string[] = [ "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" ]; + /* static */ const listbox_item_current: Static = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + + /* static */ const listbox_item_current2: Static = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Trees")) + { + if (ImGui.TreeNode("Basic trees")) + { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) + { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Advanced, with Selectable nodes")) + { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position: Static = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + + /* static */ const selection_mask: Static = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked: number = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(ImGuiStyleVar.IndentSpacing, ImGui.GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) + { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.OpenOnDoubleClick | ((selection_mask.value & (1 << i)) ? ImGuiTreeNodeFlags.Selected : 0); + if (i < 3) + { + // Node + const node_open: boolean = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.NoTreePushOnOpen; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) + { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Collapsing Headers")) + { + /* static */ const closable_group: Static = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Bullets")) + { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text")) + { + if (ImGui.TreeNode("Colored Text")) + { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new ImVec4(1.0,0.0,1.0,1.0), "Pink"); + ImGui.TextColored(new ImVec4(1.0,1.0,0.0,1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Word Wrapping")) + { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + + /* static */ const wrap_width: Static = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + + ImGui.Text("Test paragraph 1:"); + let pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("UTF-8 Text")) + { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf: Static = STATIC("buf", new ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Images")) + { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io: ImGuiIO = ImGui.GetIO(); + + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id: WebGLTexture | null = io.Fonts.TexID; + const my_tex_w: number = io.Fonts.TexWidth; + const my_tex_h: number = io.Fonts.TexHeight; + + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new ImVec2(my_tex_w, my_tex_h), new ImVec2(0,0), new ImVec2(1,1), new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + const focus_sz: number = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; if (focus_x < 0.0) focus_x = 0.0; else if (focus_x > my_tex_w - focus_sz) focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; if (focus_y < 0.0) focus_y = 0.0; else if (focus_y > my_tex_h - focus_sz) focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0: ImVec2 = new ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1: ImVec2 = new ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new ImVec2(128,128), uv0, uv1, new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count: Static = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); + let frame_padding: number = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new ImVec2(32,32), new ImVec2(0,0), new ImVec2(32.0/my_tex_w,32/my_tex_h), frame_padding, new ImVec4(0,0,0,1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Selectables")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const selected: Static = STATIC("selected#672", [ false, true, false, false ]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], ImGuiSelectableFlags.AllowDoubleClick)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) + { + /* static */ const selected: Static = STATIC("selected#687", [ false, false, false ]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); ImGui.SameLine(300); ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) + { + ImGui.Columns(3, null, false); + /* static */ const selected: Static = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) + { + const label: string = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) + { + /* static */ const selected: Static = STATIC("selected#712", [ true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true ]); + for (let i = 0; i < 16; i++) + { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new ImVec2(50,50))) + { + let x: number = i % 4, y: number = i / 4; + if (x > 0) selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Filtered Text Input")) + { + /* static */ const buf1: Static = STATIC("buf1", new ImStringBuffer(64, "")); ImGui.InputText("default", buf1.value, IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2: Static = STATIC("buf2", new ImStringBuffer(64, "")); ImGui.InputText("decimal", buf2.value, IM_ARRAYSIZE(buf2.value), ImGuiInputTextFlags.CharsDecimal); + /* static */ const buf3: Static = STATIC("buf3", new ImStringBuffer(64, "")); ImGui.InputText("hexadecimal", buf3.value, IM_ARRAYSIZE(buf3.value), ImGuiInputTextFlags.CharsHexadecimal | ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf4: Static = STATIC("buf4", new ImStringBuffer(64, "")); ImGui.InputText("uppercase", buf4.value, IM_ARRAYSIZE(buf4.value), ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf5: Static = STATIC("buf5", new ImStringBuffer(64, "")); ImGui.InputText("no blank", buf5.value, IM_ARRAYSIZE(buf5.value), ImGuiInputTextFlags.CharsNoBlank); + class TextFilters { public static FilterImGuiLetters(data: ImGuiTextEditCallbackData): number { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) return 0; return 1; } } + /* static */ const buf6: Static = STATIC("buf6", new ImStringBuffer(64, "")); ImGui.InputText("\"imgui\" letters", buf6.value, IM_ARRAYSIZE(buf6.value), ImGuiInputTextFlags.CallbackCharFilter, TextFilters.FilterImGuiLetters); + + ImGui.Text("Password input"); + /* static */ const bufpass: Static = STATIC("bufpass", new ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.Password | ImGuiInputTextFlags.CharsNoBlank); + ImGui.SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.CharsNoBlank); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-line Text Input")) + { + /* static */ const read_only: Static = STATIC("read_only", false); + /* static */ const text: Static = STATIC("text", new ImStringBuffer(1024*16, + "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, IM_ARRAYSIZE(text.value), new ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), ImGuiInputTextFlags.AllowTabInput | (read_only.value ? ImGuiInputTextFlags.ReadOnly : 0)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Plots widgets")) + { + /* static */ const animate: Static = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + + /* static */ const arr: Static = STATIC("arr", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + ImGui.PlotLines_Array("Frame Times", arr.value, IM_ARRAYSIZE(arr.value)); + + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values: Static = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset: Static = STATIC("values_offset", 0); + /* static */ const refresh_time: Static = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) // Create dummy data at fixed 60 hz rate for the demo + { + /* static */ const phase: Static = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value+1) % IM_ARRAYSIZE(values.value); + phase.value += 0.10*values_offset.value; + refresh_time.value += 1.0/60.0; + } + ImGui.PlotLines_Array("Lines", values.value, IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new ImVec2(0,80)); + + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs + { + public static Sin(data: any, i: number): number { return Math.sin(i * 0.1); } + public static Saw(data: any, i: number): number { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type: Static = STATIC("func_type", 0), display_count: Static = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func: (data: any, i: number) => number = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.Separator(); + + // Animate a simple progress bar + /* static */ const progress: Static = STATIC("progress", 0.0), progress_dir: Static = STATIC("progress_dir", 1.0); + if (animate.value) + { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { progress.value = +1.1; progress_dir.value *= -1.0; } + if (progress.value <= -0.1) { progress.value = -0.1; progress_dir.value *= -1.0; } + } + + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new ImVec2(0.0,0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + + const progress_saturated: number = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf: string = `${(progress_saturated*1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new ImVec2(0.,0.), buf); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Color/Picker Widgets")) + { + /* static */ const color: Static = STATIC("color#863", new ImColor(114, 144, 154, 200).toImVec4()); + + /* static */ const hdr: Static = STATIC("hdr", false); + /* static */ const alpha_preview: Static = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview: Static = STATIC("alpha_half_preview", false); + /* static */ const options_menu: Static = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); ImGui.SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); ImGui.SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags: ImGuiColorEditFlags = (hdr.value ? ImGuiColorEditFlags.HDR : 0) | (alpha_half_preview.value ? ImGuiColorEditFlags.AlphaPreviewHalf : (alpha_preview.value ? ImGuiColorEditFlags.AlphaPreview : 0)) | (options_menu.value ? 0 : ImGuiColorEditFlags.NoOptions); + + ImGui.Text("Color widget:"); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, ImGuiColorEditFlags.HSV | misc_flags); + + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, ImGuiColorEditFlags.Float | misc_flags); + + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoLabel | misc_flags); + + ImGui.Text("Color button with Custom Picker Popup:"); + + // Generate a dummy palette + /* static */ const saved_palette_inited: Static = STATIC("saved_palette_inited", false); + /* static */ const saved_palette: Static = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) + { + saved_palette.value[n] = new ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r: ImScalar = [ 0.0 ]; + const g: ImScalar = [ 0.0 ]; + const b: ImScalar = [ 0.0 ]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + + /* static */ const backup_color: Static = STATIC("backup_color", new ImVec4()); + let open_popup: boolean = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) + { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) + { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < IM_ARRAYSIZE(saved_palette.value); n++) + { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], ImGuiColorEditFlags.NoAlpha | ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.NoTooltip, new ImVec2(20,20))) + color.value.Copy(new ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + + if (ImGui.BeginDragDropTarget()) + { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new ImVec2(80,80)); + + ImGui.Text("Color picker:"); + /* static */ const alpha: Static = STATIC("alpha", true); + /* static */ const alpha_bar: Static = STATIC("alpha_bar", true); + /* static */ const side_preview: Static = STATIC("side_preview", true); + /* static */ const ref_color: Static = STATIC("ref_color", false); + /* static */ const ref_color_v: Static = STATIC("ref_color_v", new ImVec4(1.0,0.0,1.0,0.5)); + /* static */ const inputs_mode: Static = STATIC("inputs_mode", 2); + /* static */ const picker_mode: Static = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) + { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) + { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, ImGuiColorEditFlags.NoInputs | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); ShowHelpMarker("User can right-click the picker to change mode."); + let flags: ImGuiColorEditFlags = misc_flags; + if (!alpha.value) flags |= ImGuiColorEditFlags.NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) flags |= ImGuiColorEditFlags.AlphaBar; + if (!side_preview.value) flags |= ImGuiColorEditFlags.NoSidePreview; + if (picker_mode.value === 1) flags |= ImGuiColorEditFlags.PickerHueBar; + if (picker_mode.value === 2) flags |= ImGuiColorEditFlags.PickerHueWheel; + if (inputs_mode.value === 1) flags |= ImGuiColorEditFlags.NoInputs; + if (inputs_mode.value === 2) flags |= ImGuiColorEditFlags.RGB; + if (inputs_mode.value === 3) flags |= ImGuiColorEditFlags.HSV; + if (inputs_mode.value === 4) flags |= ImGuiColorEditFlags.HEX; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Uint8 | ImGuiColorEditFlags.HSV); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Float | ImGuiColorEditFlags.RGB); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Range Widgets")) + { + /* static */ const begin: Static = STATIC("begin", 10), end: Static = STATIC("end", 90); + /* static */ const begin_i: Static = STATIC("begin_i", 100), end_i: Static = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-component Widgets")) + { + /* static */ const vec4f: Static> = STATIC>("vec4f", [ 0.10, 0.20, 0.30, 0.44 ]); + /* static */ const vec4i: Static> = STATIC>("vec4i", [ 1, 5, 100, 255 ]); + + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Vertical Sliders")) + { + const spacing: number = 4; + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(spacing, spacing)); + + /* static */ const int_value: Static = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new ImVec2(18,160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + + /* static */ const values: Static = STATIC("values#1072", [ 0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0 ]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.FrameBg, ImColor.HSV(i/7.0, 0.5, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, ImColor.HSV(i/7.0, 0.6, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgActive, ImColor.HSV(i/7.0, 0.7, 0.5)); + ImGui.PushStyleColor(ImGuiCol.SliderGrab, ImColor.HSV(i/7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new ImVec2(18,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2: Static = STATIC("values2", [ 0.20, 0.80, 0.40, 0.25 ]); + const rows: number = 3; + const small_slider_size: Readonly = new ImVec2(18, (160.0-(rows-1)*spacing)/rows); + for (let nx = 0; nx < 4; nx++) + { + if (nx > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) + { + ImGui.PushID(nx*rows+ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(ImGuiStyleVar.GrabMinSize, 40); + ImGui.VSliderFloat("##v", new ImVec2(40,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Layout")) + { + if (ImGui.TreeNode("Child regions")) + { + /* static */ const disable_mouse_wheel: Static = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + + ImGui.Text("Without border"); + /* static */ const line: Static = STATIC("line", 50); + let goto_line: boolean = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, ImGuiInputTextFlags.EnterReturnsTrue) || goto_line; + ImGui.PopItemWidth(); + + ImGui.BeginChild("Sub1", new ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5,300), false, ImGuiWindowFlags.HorizontalScrollbar | (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + for (let i = 0; i < 100; i++) + { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + + ImGui.SameLine(); + + ImGui.PushStyleVar(ImGuiStyleVar.ChildRounding, 5.0); + ImGui.BeginChild("Sub2", new ImVec2(0,300), true, (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) + { + if (i === 50) + ImGui.NextColumn(); + const buf: string = `${("00000000" + (i*5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Widgets Width")) + { + /* static */ const f: Static = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Basic Horizontal Layout")) + { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + + // Text + ImGui.Text("Two items: Hello"); ImGui.SameLine(); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Adjust spacing + ImGui.Text("More spacing: Hello"); ImGui.SameLine(0, 20); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); ImGui.SameLine(); + ImGui.Button("Banana"); ImGui.SameLine(); + ImGui.Button("Apple"); ImGui.SameLine(); + ImGui.Button("Corniflower"); + + // Button + ImGui.Text("Small buttons"); ImGui.SameLine(); + ImGui.SmallButton("Like this one"); ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.Text("x=150"); + ImGui.SameLine(300); ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.SmallButton("x=150"); + ImGui.SameLine(300); ImGui.SmallButton("x=300"); + + // Checkbox + /* static */ const c1: Static=STATIC("c1", false),c2: Static=STATIC("c2", false),c3: Static=STATIC("c3", false),c4: Static=STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + + // Various + /* static */ const f0: Static=STATIC("f0#1255", 1.0), f1: Static=STATIC("f1#1255", 2.0), f2: Static=STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD" ]; + /* static */ const item: Static = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, IM_ARRAYSIZE(items)); ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0,5.0); + ImGui.PopItemWidth(); + + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection: Static = STATIC("selection", [ 0, 1, 2, 3 ]); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + + // Dummy + const sz: Readonly = new ImVec2(30,30); + ImGui.Button("A", sz); ImGui.SameLine(); + ImGui.Dummy(sz); ImGui.SameLine(); + ImGui.Button("B", sz); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Groups")) + { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size: ImVec2 = ImGui.GetItemRectSize(); + const values: number[/*5*/] = [ 0.5, 0.20, 0.80, 0.60, 0.25 ]; + ImGui.PlotHistogram_Array("##values", values, IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + + ImGui.Button("ACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text Baseline Alignment")) + { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + + ImGui.Text("One\nTwo\nThree"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + + ImGui.Button("HOP##1"); ImGui.SameLine(); + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("HOP##2"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("TEST##1"); ImGui.SameLine(); + ImGui.Text("TEST"); ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); ImGui.SameLine(); + ImGui.Button("Widget##1"); ImGui.SameLine(); + ImGui.Text("Widget"); ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); ImGui.SameLine(); + ImGui.Button("Widget##3"); + + // Tree + const spacing: number = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open: boolean = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##2"); + if (node_open) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##4"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Scrolling")) + { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track: Static = STATIC("track", true); + /* static */ const track_line: Static = STATIC("track_line", 50), scroll_to_px: Static = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to: boolean = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) track.value = false; + + for (let i = 0; i < 5; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) + { + if (track.value && line === track_line.value) + { + ImGui.TextColored(new ImColor(255,255,0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else + { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y: number = ImGui.GetScrollY(), scroll_max_y: number = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.Bullet(); ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines: Static = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 3.0); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new ImVec2(0, ImGui.GetFrameHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags.HorizontalScrollbar); + for (let line = 0; line < lines.value; line++) + { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons: number = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) + { + if (n > 0) ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf: string = n.toFixed(0); + const label: string = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; + const hue: number = n*0.05; + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x: number = ImGui.GetScrollX(), scroll_max_x: number = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta: number = 0.0; + ImGui.SmallButton("<<"); if (ImGui.IsItemActive()) scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text("Scroll from code"); ImGui.SameLine(); + ImGui.SmallButton(">>"); if (ImGui.IsItemActive()) scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) + { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Clipping")) + { + /* static */ const size: Static = STATIC("size", new ImVec2(100, 100)), offset: Static = STATIC("offset", new ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos: Readonly = ImGui.GetCursorScreenPos(); + const clip_rect: Readonly = new ImVec4(pos.x, pos.y, pos.x+size.value.x, pos.y+size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { offset.value.x += ImGui.GetIO().MouseDelta.x; offset.value.y += ImGui.GetIO().MouseDelta.y; } + ImGui.GetWindowDrawList().AddRectFilled(pos, new ImVec2(pos.x+size.value.x,pos.y+size.value.y), IM_COL32(90,90,120,255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize()*2.0, new ImVec2(pos.x+offset.value.x,pos.y+offset.value.y), IM_COL32(255,255,255,255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Popups & Modal windows")) + { + if (ImGui.TreeNode("Popups")) + { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + + /* static */ const selected_fish: Static = STATIC("selected_fish", -1); + const names: string[] = [ "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" ]; + /* static */ const toggles: Static = STATIC("toggles", [ true, false, false, false, false ]); + + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) + { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) + { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Context menus")) + { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value: Static = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) + { + if (ImGui.Selectable("Set to zero")) value.value = 0.0; + if (ImGui.Selectable("Set to PI")) value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + + /* static */ const name: Static = STATIC("name", new ImStringBuffer(32, "Label1")); + const buf: string = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). + { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); ImGui.Text("(<-- right-click here)"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Modals")) + { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, ImGuiWindowFlags.AlwaysAutoResize)) + { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + + /* static */ const dont_ask_me_next_time: Static = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + + if (ImGui.Button("OK", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.EndPopup(); + } + + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) + { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item: Static = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color: Static> = STATIC>("color#2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) + { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Menus inside a regular window")) + { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Columns")) + { + ImGui.PushID("Columns"); + + // Basic columns + if (ImGui.TreeNode("Basic")) + { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) + { + const label: string = `Item ${n}`; + if (ImGui.Selectable(label)) {} + if (ImGui.Button(label, new ImVec2(-1,0))) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Text("Hovered"); ImGui.NextColumn(); + ImGui.Separator(); + const names: string[/*3*/] = [ "One", "Two", "Three" ]; + const paths: string[/*3*/] = [ "/path/one", "/path/two", "/path/three" ]; + /* static */ const selected: Static = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) + { + const label: string = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, ImGuiSelectableFlags.SpanAllColumns)) + selected.value = i; + const hovered: boolean = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); ImGui.NextColumn(); + ImGui.Text(paths[i]); ImGui.NextColumn(); + ImGui.Text(`${hovered}`); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) + { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo: Static = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar: Static = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + + if (ImGui.CollapsingHeader("Category A")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) + { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Borders")) + { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders: Static = STATIC("h_borders", true); + /* static */ const v_borders: Static = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4*3; i++) + { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c: string = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.SetNextWindowContentSize(new ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new ImVec2(0, ImGui.GetFontSize() * 20), false, ImGuiWindowFlags.HorizontalScrollbar); + ImGui.Columns(10); + const ITEMS_COUNT: number = 2000; + const clipper: ImGuiListClipper = new ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) + { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) + { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + + const node_open: boolean = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) + { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { ImGui.BulletText("Sailor"); ImGui.TreePop(); } ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { ImGui.BulletText("Marin"); ImGui.TreePop(); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + + if (ImGui.CollapsingHeader("Filtering")) + { + /* static */ const filter: Static = STATIC("filter#1864", new ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines: string[] = [ "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" ]; + for (let i = 0; i < IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + + if (ImGui.CollapsingHeader("Inputs & Focus")) + { + const io: ImGuiIO = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + + if (ImGui.TreeNode("Keyboard & Mouse State")) + { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Mouse clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse dbl-clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseDoubleClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse released:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseReleased(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + + ImGui.Text("Keys down:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Keys pressed:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyPressed(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text("Keys release:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyReleased(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Tabbing")) + { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf: Static = STATIC("buf1#1921", new ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focus from code")) + { + const focus_1: boolean = ImGui.Button("Focus on 1"); ImGui.SameLine(); + const focus_2: boolean = ImGui.Button("Focus on 2"); ImGui.SameLine(); + const focus_3: boolean = ImGui.Button("Focus on 3"); + let has_focus: number = 0; + /* static */ const buf: Static = STATIC("buf2#1944", new ImStringBuffer(128, "click on a button to set focus")); + + if (focus_1) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 1; + + if (focus_2) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 2; + + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focused & Hovered Test")) + { + /* static */ const embed_all_inside_a_child_window: Static = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new ImVec2(0, ImGui.GetFontSize() * 25), true); + + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows | ImGuiFocusedFlags.RootWindow)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.RootWindow)}\n`); + + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows | ImGuiHoveredFlags.RootWindow)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow)}\n"`); + + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText( + `IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenOverlapped)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.RectOnly)}\n`); + + ImGui.BeginChild("child", new ImVec2(0,50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Dragging")) + { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) + { + // Draw a line between the button and the mouse cursor + const draw_list: ImGui.ImDrawList = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[ImGuiCol.Button]), 4.0); + draw_list.PopClipRect(); + + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw: Readonly = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold: Readonly = ImGui.GetMouseDragDelta(0); + const mouse_delta: Readonly = io.MouseDelta; + ImGui.SameLine(); ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Mouse cursors")) + { + const mouse_cursors_names: string[] = [ "Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE" ]; + IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) === ImGuiMouseCursor.COUNT); + + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < ImGuiMouseCursor.COUNT; i++) + { + const label: string = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + + ImGui.End(); +} + +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +export function ShowStyleSelector(label: string): boolean +{ + /* static */ const style_idx: Static = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) + { + switch (style_idx.value) + { + case 0: ImGui.StyleColorsClassic(); break; + case 1: ImGui.StyleColorsDark(); break; + case 2: ImGui.StyleColorsLight(); break; + } + return true; + } + return false; +} + +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +export function ShowFontSelector(label: string): void +{ + const io: ImGuiIO = ImGui.GetIO(); + const font_current: ImFont = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) + { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker( + "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} + +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void +{ + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style: ImGuiStyle = ImGui.GetStyle(); + /* static */ const ref_saved_style: Static = STATIC("ref_saved_style", new ImGuiStyle()); + + // Default to using internal storage as reference + /* static */ const init: Static = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + + if (/*ImGui.*/ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ShowFontSelector("Fonts##Selector"); + + + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { let window_border: boolean = (style.WindowBorderSize > 0.0); if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) style.WindowBorderSize = window_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let frame_border: boolean = (style.FrameBorderSize > 0.0); if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) style.FrameBorderSize = frame_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let popup_border: boolean = (style.PopupBorderSize > 0.0); if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) style.PopupBorderSize = popup_border ? 1.0 : 0.0; } + + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + + if (ImGui.TreeNode("Rendering")) + { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); ImGui.SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Settings")) + { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); ImGui.SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Colors")) + { + /* static */ const output_dest: Static = STATIC("output_dest", 0); + /* static */ const output_only_modified: Static = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) + { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const col: Readonly = style.Colors[i]; + const name: string = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); ImGui.PushItemWidth(120); ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + + /* static */ const filter: Static = STATIC("filter#2223", new ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + + /* static */ const alpha_flags: Static = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreview); ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreviewHalf); + + ImGui.BeginChild("#colors", new ImVec2(0, 300), true, ImGuiWindowFlags.AlwaysVerticalScrollbar | ImGuiWindowFlags.AlwaysHorizontalScrollbar); + ImGui.PushItemWidth(-160); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], ImGuiColorEditFlags.AlphaBar | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) + { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Save")) ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Revert")) style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + + ImGui.TreePop(); + } + + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened: boolean = ImGui.TreeNode("Fonts"); + if (fonts_opened) + { + const atlas: ImFontAtlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) + { + ImGui.Image(atlas.TexID, new ImVec2(atlas.TexWidth, atlas.TexHeight), new ImVec2(0,0), new ImVec2(1,1), new ImColor(255,255,255,255).Value, new ImColor(255,255,255,128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale: Static = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + + ImGui.PopItemWidth(); +} + +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar(): void +{ + if (ImGui.BeginMainMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) + { + if (ImGui.MenuItem("Undo", "CTRL+Z")) {} + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) {} + if (ImGui.MenuItem("Copy", "CTRL+C")) {} + if (ImGui.MenuItem("Paste", "CTRL+V")) {} + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} + +function ShowExampleMenuFile(): void +{ + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) {} + if (ImGui.MenuItem("Open", "Ctrl+O")) {} + if (ImGui.BeginMenu("Open Recent")) + { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) + { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) {} + if (ImGui.MenuItem("Save As..")) {} + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) + { + /* static */ const enabled: Static = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f: Static = STATIC("f#2408", 0.5); + /* static */ const n: Static = STATIC("n", 0); + /* static */ const b: Static = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) + { + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i as ImGuiCol); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i as ImGuiCol)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) // Disabled + { + IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) {} + if (ImGui.MenuItem("Quit", "Alt+F4")) {} +} + +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open: ImAccess): void +{ + if (!ImGui.Begin("Example: Auto-resizing window", p_open, ImGui.WindowFlags.AlwaysAutoResize)) + { + ImGui.End(); + return; + } + + /* static */ const lines: Static = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} + +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open: ImAccess): void +{ + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + public static Square(data: ImGuiSizeConstraintCallbackData): void { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + public static Step(data: ImGuiSizeConstraintCallbackData): void { + const step: number = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + + /* static */ const auto_resize: Static = STATIC("auto_resize", false); + /* static */ const type: Static = STATIC("type", 0); + /* static */ const display_lines: Static = STATIC("display_lines", 10); + if (type.value === 0) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 0), new ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, -1), new ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) ImGui.SetNextWindowSizeConstraints(new ImVec2(100, 100), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) ImGui.SetNextWindowSizeConstraints(new ImVec2(400, -1), new ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 400), new ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100);// Fixed Step + + const flags: ImGuiWindowFlags = auto_resize.value ? ImGuiWindowFlags.AlwaysAutoResize : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) + { + const desc: string[] = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { ImGui.SetWindowSize(new ImVec2(200, 200)); } ImGui.SameLine(); + if (ImGui.Button("500x500")) { ImGui.SetWindowSize(new ImVec2(500, 500)); } ImGui.SameLine(); + if (ImGui.Button("800x200")) { ImGui.SetWindowSize(new ImVec2(800, 200)); } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} + +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open: ImAccess): void +{ + const DISTANCE: number = 10.0; + /* static */ const corner: Static = STATIC("corner", 0); + const window_pos: Readonly = new ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot: Readonly = new ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, ImGuiCond.Always, window_pos_pivot); + ImGui.PushStyleColor(ImGuiCol.WindowBg, new ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags.NoTitleBar|ImGuiWindowFlags.NoResize|ImGuiWindowFlags.AlwaysAutoResize|ImGuiWindowFlags.NoMove|ImGuiWindowFlags.NoSavedSettings)) + { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} + +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open: ImAccess): void +{ + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new ImVec2(100,100), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + + ImGui.SetNextWindowPos(new ImVec2(100,200), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf: string = `Animated title ${"|/-\\".charAt((ImGui.GetTime()/0.25)&3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new ImVec2(100,300), ImGuiCond.FirstUseEver); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} + +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(350,560), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Custom rendering", p_open)) + { + ImGui.End(); + return; + } + + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz: Static = STATIC("sz", 36.0); + /* static */ const col: Static = STATIC("color#2583", new ImVec4(1.0,1.0,0.4,1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value) + { + const p: Readonly = ImGui.GetCursorScreenPos(); + const col32: ImU32 = IM_COL32(col.value.x*255, col.value.y*255, col.value.z*255, col.value.w*255); + let x: number = p.x + 4.0, y: number = p.y + 4.0, spacing: number = 8.0; + for (let n = 0; n < 2; n++) + { + const thickness: number = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 20, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 0.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight, thickness); x += sz.value+spacing; + draw_list.AddTriangle(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y ), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x, y+sz.value), col32, thickness); x += spacing; + draw_list.AddBezierCurve(new ImVec2(x, y), new ImVec2(x+sz.value*1.3,y+sz.value*0.3), new ImVec2(x+sz.value-sz.value*1.3,y+sz.value-sz.value*0.3), new ImVec2(x+sz.value, y+sz.value), col32, thickness); + x = p.x + 4; + y += sz.value+spacing; + } + draw_list.AddCircleFilled(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight); x += sz.value+spacing; + draw_list.AddTriangleFilled(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32); x += sz.value+spacing; + draw_list.AddRectFilledMultiColor(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), IM_COL32(0,0,0), IM_COL32(255,0,0), IM_COL32(255,255,0), IM_COL32(0,255,0)); + ImGui.Dummy(new ImVec2((sz.value+spacing)*8, (sz.value+spacing)*3)); + } + ImGui.Separator(); + { + /* static */ const points: Static> = STATIC("points", new ImVector()); + /* static */ const adding_line: Static = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) points.value.clear(); + if (points.value.Size >= 2) { ImGui.SameLine(); if (ImGui.Button("Undo")) { points.value.pop_back(); points.value.pop_back(); } } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos: ImVec2 = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size: ImVec2 = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) canvas_size.x = 50.0; + if (canvas_size.y < 50.0) canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50,50,50), IM_COL32(50,50,60), IM_COL32(60,60,70), IM_COL32(50,50,60)); + draw_list.AddRect(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255,255,255)); + + let adding_preview: boolean = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas: ImVec2 = new ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) + { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) + { + if (!adding_line.value && ImGui.IsMouseClicked(0)) + { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) + { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new ImVec2(canvas_pos.x + points.value.Data[i+1].x, canvas_pos.y + points.value.Data[i+1].y), IM_COL32(255,255,0,255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} + +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256, ""); + // ImVector Items; + Items: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + // ImVector History; + History: ImVector = new ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + HistoryPos: number = -1; + // ImVector Commands; + Commands: ImVector = new ImVector(); + + constructor() { + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + + delete(): void {} + + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + + ClearLog(): void { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + + // void Draw(const char* title, bool* p_open) + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin(title, p_open)) + { + ImGui.End(); + return; + } + + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) + { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + + // TODO: display items starting from the bottom + + if (ImGui.SmallButton("Add Dummy Text")) { this.AddLog(`${this.Items.Size} some text`); this.AddLog("some more text"); this.AddLog("display very important message here!"); } ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { this.AddLog("[error] something went wrong"); } ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { this.ClearLog(); } ImGui.SameLine(); + const copy_to_clipboard: boolean = ImGui.SmallButton("Copy"); ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + + ImGui.Separator(); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + /* static */ const filter: Static = STATIC("filter#2763", new ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + + const footer_height_to_reserve: number = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags.HorizontalScrollbar); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.Selectable("Clear")) this.ClearLog(); + ImGui.EndPopup(); + } + + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(4,1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) + { + // const char* item = Items[i]; + const item: string = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col: ImVec4 = new ImVec4(1.0,1.0,1.0,1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) col = new ImVec4(1.0,0.4,0.4,1.0); + // else if (strncmp(item, "# ", 2) === 0) col = ImColor(1.0f,0.78f,0.58f,1.0f); + else if (/^# /.test(item)) col = new ImVec4(1.0,0.78,0.58,1.0); + ImGui.PushStyleColor(ImGuiCol.Text, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + + // Command-line + if (ImGui.InputText("Input", this.InputBuf, IM_ARRAYSIZE(this.InputBuf), ImGuiInputTextFlags.EnterReturnsTrue|ImGuiInputTextFlags.CallbackCompletion|ImGuiInputTextFlags.CallbackHistory, ExampleAppConsole.TextEditCallbackStub, this)) + { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(ImGuiFocusedFlags.RootAndChildWindows) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + + ImGui.End(); + } + + // void ExecCommand(const char* command_line) + ExecCommand(command_line: string): void + { + this.AddLog(`# ${command_line}\n`); + + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size-1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) + { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") + { + this.ClearLog(); + } + // else if (Stricmp(command_line, "HELP") === 0) + else if (command_line.toUpperCase() === "HELP") + { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + // else if (Stricmp(command_line, "HISTORY") === 0) + else if (command_line.toUpperCase() === "HISTORY") + { + const first: number = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else + { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data: ImGuiTextEditCallbackData): number + { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console: ExampleAppConsole = data.UserData as ExampleAppConsole; + return console.TextEditCallback(data); + } + + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data: ImGuiTextEditCallbackData): number + { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) + { + case ImGuiInputTextFlags.CallbackCompletion: + { + // Example of TEXT COMPLETION + + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + + break; + } + case ImGuiInputTextFlags.CallbackHistory: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} + +function ShowExampleAppConsole(p_open: ImAccess): void +{ + /* static */ const console: Static = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} + +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog +{ + // ImGuiTextBuffer Buf; + Buf: ImGuiTextBuffer = new ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + Filter: ImGuiTextFilter = new ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + LineOffsets: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear(): void { this.Buf.clear(); this.LineOffsets.clear(); } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void + { + let old_size: number = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(500,400), ImGuiCond.FirstUseEver); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) this.Clear(); + ImGui.SameLine(); + const copy: boolean = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new ImVec2(0,0), false, ImGuiWindowFlags.HorizontalScrollbar); + if (copy) ImGui.LogToClipboard(); + + if (this.Filter.IsActive()) + { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else + { + ImGui.TextUnformatted(this.Buf.begin()); + } + + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} + +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open: ImAccess): void +{ + /* static */ const log: Static = STATIC("log#3073", new ExampleAppLog()); + + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time: Static = STATIC("last_time", -1.0); + const time: number = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) + { + const random_words: string[] = [ "system", "info", "warning", "error", "fatal", "notice", "log" ]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + + log.value.Draw("Example: Log", p_open); +} + +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(500, 440), ImGuiCond.FirstUseEver); + if (ImGui.Begin("Example: Layout", p_open, ImGuiWindowFlags.MenuBar)) + { + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + if (ImGui.MenuItem("Close")) p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + // left + /* static */ const selected: Static = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) + { + const label: string = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) {} + ImGui.SameLine(); + if (ImGui.Button("Save")) {} + ImGui.EndGroup(); + } + ImGui.End(); +} + +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(430,450), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Property editor", p_open)) + { + ImGui.End(); + return; + } + + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2,2)); + ImGui.Columns(2); + ImGui.Separator(); + + class funcs + { + static ShowDummyObject(prefix: string, uid: number): void + { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open: boolean = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) + { + /* static */ const dummy_members: Static = STATIC("dummy_members", [ 0.0,0.0,1.0,3.1416,100.0,999.0 ]); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) + { + funcs.ShowDummyObject("Child", 424242); + } + else + { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label: string = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref: ImScalar = [ dummy_members.value[i] || 0 ]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} + +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Long text display", p_open)) + { + ImGui.End(); + return; + } + + /* static */ const test_type: Static = STATIC("test_type", 0); + /* static */ const log: Static = STATIC("log#3217", new ImGuiTextBuffer()); + /* static */ const lines: Static = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { log.value.clear(); lines.value = 0; } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) + { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value+i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) + { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + const clipper: ImGuiListClipper = new ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} + +// End of Demo code +// #else + +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} + +// #endif diff --git a/imgui_memory_editor.js b/imgui_memory_editor.js new file mode 100644 index 0000000..e9f27e2 --- /dev/null +++ b/imgui_memory_editor.js @@ -0,0 +1,448 @@ +"use strict"; +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +// #include // sprintf, scanf +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +class MemoryEditor { + constructor() { + // typedef unsigned char u8; + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + this.Open = false; + // bool ReadOnly; // = false // set to true to disable any editing + this.ReadOnly = false; + // int Rows; // = 16 // + this.Rows = 16; + // bool OptShowAscii; // = true // + this.OptShowAscii = true; + // bool OptShowHexII; // = false // + this.OptShowHexII = false; + // bool OptGreyOutZeroes; // = true // + this.OptGreyOutZeroes = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + this.OptMidRowsCount = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + this.OptAddrDigitsCount = 0; + // ImU32 HighlightColor; // // color of highlight + this.HighlightColor = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + this.ReadFn = null; + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + this.WriteFn = null; + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + this.HighlightFn = null; + // State/Internals + // bool ContentsWidthChanged; + this.ContentsWidthChanged = false; + // size_t DataEditingAddr; + this.DataEditingAddr = -1; + // bool DataEditingTakeFocus; + this.DataEditingTakeFocus = false; + // char DataInputBuf[32]; + this.DataInputBuf = new imgui_1.ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + this.AddrInputBuf = new imgui_1.ImStringBuffer(32, ""); + // size_t GotoAddr; + this.GotoAddr = -1; + // size_t HighlightMin, HighlightMax; + this.HighlightMin = -1; + this.HighlightMax = -1; + } + GotoAddrAndHighlight(addr_min, addr_max) { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + CalcSizes(s, mem_size, base_display_addr) { + const style = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n, pad = 0) { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + static sscanf_PRISizeT(s) { + return parseInt(s, 16); + } + // Standalone Memory Editor window + DrawWindow(title, mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new imgui_2.ImVec2(0.0, 0.0), new imgui_2.ImVec2(s.WindowWidth, Number.MAX_VALUE)); + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, 8 /* NoScrollbar */)) { + if (ImGui.IsWindowHovered(2 /* RootWindow */ | 1 /* ChildWindows */) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new imgui_2.ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + // Memory Editor contents only + DrawContents(mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x0000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style = ImGui.GetStyle(); + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new imgui_2.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list = ImGui.GetWindowDrawList(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_2.ImVec2(0, 0)); + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_2.ImVec2(0, 0)); + const line_total_count = 0 | ((mem_size + this.Rows - 1) / this.Rows); + const clipper = new imgui_3.ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr = clipper.DisplayStart * this.Rows; + const visible_end_addr = clipper.DisplayEnd * this.Rows; + let data_next = false; + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + const data_editing_addr_backup = this.DataEditingAddr; + let data_editing_addr_next = -1; + if (this.DataEditingAddr !== -1) { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(3 /* UpArrow */)) && this.DataEditingAddr >= this.Rows) { + data_editing_addr_next = this.DataEditingAddr - this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(4 /* DownArrow */)) && this.DataEditingAddr < mem_size - this.Rows) { + data_editing_addr_next = this.DataEditingAddr + this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(1 /* LeftArrow */)) && this.DataEditingAddr > 0) { + data_editing_addr_next = this.DataEditingAddr - 1; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(2 /* RightArrow */)) && this.DataEditingAddr < mem_size - 1) { + data_editing_addr_next = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) { + // Track cursor movements + const scroll_offset = (0 | (data_editing_addr_next / this.Rows) - 0 | (data_editing_addr_backup / this.Rows)); + const scroll_desired = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + // Draw vertical separator + const window_pos = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(5 /* Border */)); + const color_text = ImGui.GetColorU32(0 /* Text */); + const color_disabled = this.OptGreyOutZeroes ? ImGui.GetColorU32(1 /* TextDisabled */) : color_text; + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) { + let addr = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + let byte_pos_x = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) { + const pos = ImGui.GetCursorScreenPos(); + let highlight_width = s.GlyphWidth * 2; + const is_next_byte_highlighted = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + if (this.DataEditingAddr === addr) { + // Display text input on current byte + let data_write = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data) { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags = 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */ | 16 /* AutoSelectAll */ | 4096 /* NoHorizontalScroll */ | 8192 /* AlwaysInsertMode */ | 256 /* CallbackAlways */; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) { + let data_input_value = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + if (this.OptShowHexII) { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + if (this.OptShowAscii) { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new imgui_2.ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + if (addr === this.DataEditingAddr) { + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(7 /* FrameBg */)); + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(40 /* TextSelectedBg */)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + if (data_next && this.DataEditingAddr < mem_size) { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) { + this.DataEditingAddr = data_editing_addr_next; + } + ImGui.Separator(); + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) + this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) + this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */)) { + // size_t goto_addr; + const goto_addr = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + if (this.GotoAddr !== -1) { + if (this.GotoAddr < mem_size) { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} +exports.MemoryEditor = MemoryEditor; +(function (MemoryEditor) { + class Sizes { + constructor() { + this.AddrDigitsCount = 0; + this.LineHeight = 0.0; + this.GlyphWidth = 0.0; + this.HexCellWidth = 0.0; + this.SpacingBetweenMidRows = 0.0; + this.PosHexStart = 0.0; + this.PosHexEnd = 0.0; + this.PosAsciiStart = 0.0; + this.PosAsciiEnd = 0.0; + this.WindowWidth = 0.0; + } + } + MemoryEditor.Sizes = Sizes; +})(MemoryEditor = exports.MemoryEditor || (exports.MemoryEditor = {})); +// #undef _PRISizeT +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfbWVtb3J5X2VkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX21lbW9yeV9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtFQUFrRTtBQUNsRSxzRUFBc0U7QUFDdEUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiw0REFBNEQ7QUFDNUQseUtBQXlLO0FBQ3pLLEVBQUU7QUFDRixTQUFTO0FBQ1QsNkdBQTZHO0FBQzdHLDRLQUE0SztBQUM1SyxFQUFFO0FBQ0YsU0FBUztBQUNULG9DQUFvQztBQUNwQyw0QkFBNEI7QUFDNUIsZ0VBQWdFO0FBQ2hFLGlCQUFpQjtBQUNqQixFQUFFO0FBQ0YsYUFBYTtBQUNiLDJCQUEyQjtBQUMzQiw4R0FBOEc7QUFDOUcsNEVBQTRFO0FBQzVFLHNIQUFzSDtBQUN0SCw2SEFBNkg7QUFDN0gsMkRBQTJEO0FBQzNELG9HQUFvRztBQUNwRywrRUFBK0U7QUFDL0UseUlBQXlJO0FBQ3pJLDhJQUE4STtBQUM5SSwyTEFBMkw7QUFDM0wsMEhBQTBIO0FBQzFILGdHQUFnRztBQUNoRyxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGFBQWE7QUFDYiw4SUFBOEk7O0FBRTlJLGVBQWU7QUFDZix3Q0FBd0M7QUFFeEMsaUNBQWlDO0FBSWpDLG1DQUF5QztBQUV6QyxtQ0FBaUM7QUFFakMsbUNBQTJDO0FBSTNDO0lBQUE7UUFFSSw0QkFBNEI7UUFFNUIsV0FBVztRQUNYLG1KQUFtSjtRQUM1SSxTQUFJLEdBQVksS0FBSyxDQUFDO1FBQzdCLDRHQUE0RztRQUNyRyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlFQUF5RTtRQUNsRSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHlFQUF5RTtRQUNsRSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUNwQyx5RUFBeUU7UUFDbEUsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDckMseUVBQXlFO1FBQ2xFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUN4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 \ No newline at end of file diff --git a/imgui_memory_editor.ts b/imgui_memory_editor.ts new file mode 100644 index 0000000..08e4234 --- /dev/null +++ b/imgui_memory_editor.ts @@ -0,0 +1,500 @@ +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. + +// #pragma once +// #include // sprintf, scanf + +import * as ImGui from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVec2 } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; + +export class MemoryEditor +{ + // typedef unsigned char u8; + + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + public Open: boolean = false; + // bool ReadOnly; // = false // set to true to disable any editing + public ReadOnly: boolean = false; + // int Rows; // = 16 // + public Rows: number = 16; + // bool OptShowAscii; // = true // + public OptShowAscii: boolean = true; + // bool OptShowHexII; // = false // + public OptShowHexII: boolean = false; + // bool OptGreyOutZeroes; // = true // + public OptGreyOutZeroes: boolean = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + public OptMidRowsCount: number = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + public OptAddrDigitsCount: number = 0; + // ImU32 HighlightColor; // // color of highlight + public HighlightColor: ImU32 = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + public ReadFn: ((data: ArrayBuffer, off: number) => number) | null = null + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + public WriteFn: ((data: ArrayBuffer, off: number, d: number) => void) | null = null + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + public HighlightFn: ((data: ArrayBuffer, off: number) => boolean) | null = null; + + // State/Internals + // bool ContentsWidthChanged; + public ContentsWidthChanged: boolean = false; + // size_t DataEditingAddr; + public DataEditingAddr: number = -1; + // bool DataEditingTakeFocus; + public DataEditingTakeFocus: boolean = false; + // char DataInputBuf[32]; + public DataInputBuf: ImStringBuffer = new ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + public AddrInputBuf: ImStringBuffer = new ImStringBuffer(32, ""); + // size_t GotoAddr; + public GotoAddr: number = -1; + // size_t HighlightMin, HighlightMax; + public HighlightMin: number = -1; + public HighlightMax: number = -1; + + public GotoAddrAndHighlight(addr_min: number, addr_max: number): void + { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + + public CalcSizes(s: MemoryEditor.Sizes, mem_size: number, base_display_addr: number): void + { + const style: ImGuiStyle = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) + { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n: number, pad: number = 0): string { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + + static sscanf_PRISizeT(s: string): number { + return parseInt(s, 16); + } + + // Standalone Memory Editor window + public DrawWindow(title: string, mem_data: ArrayBuffer, mem_size: number = mem_data.byteLength, base_display_addr: number = 0x000): void + { + const s: MemoryEditor.Sizes = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, Number.MAX_VALUE)); + + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, ImGuiWindowFlags.NoScrollbar)) + { + if (ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow | ImGuiHoveredFlags.ChildWindows) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) + { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + + // Memory Editor contents only + public DrawContents(mem_data: ArrayBuffer, mem_size: number = mem_data.byteLength, base_display_addr: number = 0x0000): void + { + const s: MemoryEditor.Sizes = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style: ImGuiStyle = ImGui.GetStyle(); + + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + ImGui.PushStyleVar(ImGui.StyleVar.FramePadding, new ImVec2(0, 0)); + ImGui.PushStyleVar(ImGui.StyleVar.ItemSpacing, new ImVec2(0, 0)); + + const line_total_count: number = 0|((mem_size + this.Rows - 1) / this.Rows); + const clipper: ImGuiListClipper = new ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr: number = clipper.DisplayStart * this.Rows; + const visible_end_addr: number = clipper.DisplayEnd * this.Rows; + + let data_next: boolean = false; + + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + + const data_editing_addr_backup: number = this.DataEditingAddr; + let data_editing_addr_next: number = -1; + if (this.DataEditingAddr !== -1) + { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.UpArrow)) && this.DataEditingAddr >= this.Rows) { data_editing_addr_next = this.DataEditingAddr - this.Rows; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.DownArrow)) && this.DataEditingAddr < mem_size - this.Rows) { data_editing_addr_next = this.DataEditingAddr + this.Rows; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.LeftArrow)) && this.DataEditingAddr > 0) { data_editing_addr_next = this.DataEditingAddr - 1; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.RightArrow)) && this.DataEditingAddr < mem_size - 1) { data_editing_addr_next = this.DataEditingAddr + 1; this.DataEditingTakeFocus = true; } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) + { + // Track cursor movements + const scroll_offset: number = (0|(data_editing_addr_next / this.Rows) - 0|(data_editing_addr_backup / this.Rows)); + const scroll_desired: boolean = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + + // Draw vertical separator + const window_pos: ImVec2 = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(ImGuiCol.Border)); + + const color_text: ImU32 = ImGui.GetColorU32(ImGuiCol.Text); + const color_disabled: ImU32 = this.OptGreyOutZeroes ? ImGui.GetColorU32(ImGuiCol.TextDisabled) : color_text; + + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) // display only visible lines + { + let addr: number = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) + { + let byte_pos_x: number = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) + { + const pos: ImVec2 = ImGui.GetCursorScreenPos(); + let highlight_width: number = s.GlyphWidth * 2; + const is_next_byte_highlighted: boolean = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) + { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + + if (this.DataEditingAddr === addr) + { + // Display text input on current byte + let data_write: boolean = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) + { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data: ImGuiTextEditCallbackData): number + { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) + { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags: ImGui.InputTextFlags = ImGui.InputTextFlags.CharsHexadecimal | ImGui.InputTextFlags.EnterReturnsTrue | ImGui.InputTextFlags.AutoSelectAll | ImGui.InputTextFlags.NoHorizontalScroll | ImGui.InputTextFlags.AlwaysInsertMode | ImGui.InputTextFlags.CallbackAlways; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) + { + let data_input_value: number = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else + { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b: number = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + + if (this.OptShowHexII) + { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else + { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) + { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + + if (this.OptShowAscii) + { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos: ImVec2 = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) + { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) + { + if (addr === this.DataEditingAddr) + { + draw_list.AddRectFilled(pos, new ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(ImGuiCol.FrameBg)); + draw_list.AddRectFilled(pos, new ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(ImGuiCol.TextSelectedBg)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c: number = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c: string = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + + if (data_next && this.DataEditingAddr < mem_size) + { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) + { + this.DataEditingAddr = data_editing_addr_next; + } + + ImGui.Separator(); + + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) + { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, ImGui.InputTextFlags.CharsHexadecimal | ImGui.InputTextFlags.EnterReturnsTrue)) + { + // size_t goto_addr; + const goto_addr: number = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + + if (this.GotoAddr !== -1) + { + if (this.GotoAddr < mem_size) + { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} + +export namespace MemoryEditor { + export class Sizes { + public AddrDigitsCount: number /* int */ = 0; + public LineHeight: number /* float */ = 0.0; + public GlyphWidth: number /* float */ = 0.0; + public HexCellWidth: number /* float */ = 0.0; + public SpacingBetweenMidRows: number /* float */ = 0.0; + public PosHexStart: number /* float */ = 0.0; + public PosHexEnd: number /* float */ = 0.0; + public PosAsciiStart: number /* float */ = 0.0; + public PosAsciiEnd: number /* float */ = 0.0; + public WindowWidth: number /* float */ = 0.0; + } +} + +// #undef _PRISizeT \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/imgui_demo.js b/imgui_demo.js new file mode 100644 index 0000000..eadc4c6 --- /dev/null +++ b/imgui_demo.js @@ -0,0 +1,2957 @@ +"use strict"; +// dear imgui, v1.53 +// (demo code) +Object.defineProperty(exports, "__esModule", { value: true }); +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +const imgui_4 = require("./imgui"); +const imgui_5 = require("./imgui"); +const imgui_6 = require("./imgui"); +const imgui_7 = require("./imgui"); +const imgui_8 = require("./imgui"); +const imgui_9 = require("./imgui"); +const imgui_10 = require("./imgui"); +const imgui_11 = require("./imgui"); +const imgui_12 = require("./imgui"); +const imgui_13 = require("./imgui"); +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE = "\n"; +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A, _B) { return ((_A) >= (_B)) ? (_A) : (_B); } +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) +class Static { + constructor(value) { + this.value = value; + } +} +const _static = {}; +function STATIC(key, value) { + return _static[key] || (_static[key] = new Static(value)); +} +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); +function ShowHelpMarker(desc) { + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} +function ShowUserGuide() { + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} +exports.ShowUserGuide = ShowUserGuide; +// Demonstrate most ImGui features (big function!) +function ShowDemoWindow(p_open = null) { + // Examples apps + /* static */ const show_app_main_menu_bar = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console = STATIC("show_app_console", false); + /* static */ const show_app_log = STATIC("show_app_log", false); + /* static */ const show_app_layout = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor = STATIC("show_app_style_editor", false); + /* static */ const show_app_metrics = STATIC("show_app_metrics", false); + /* static */ const show_app_about = STATIC("show_app_about", false); + if (show_app_main_menu_bar.value) + ShowExampleAppMainMenuBar(); + if (show_app_console.value) + ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) + ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) + ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) + ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) + ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) + ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) + ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) + ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) + ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) + ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + if (show_app_metrics.value) { + ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); + } + if (show_app_style_editor.value) { + ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ + ShowStyleEditor(); + ImGui.End(); + } + if (show_app_about.value) { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, 64 /* AlwaysAutoResize */); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + /* static */ const no_titlebar = STATIC("no_titlebar", false); + /* static */ const no_scrollbar = STATIC("no_scrollbar", false); + /* static */ const no_menu = STATIC("no_menu", false); + /* static */ const no_move = STATIC("no_move", false); + /* static */ const no_resize = STATIC("no_resize", false); + /* static */ const no_collapse = STATIC("no_collapse", false); + /* static */ const no_close = STATIC("no_close", false); + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags = 0; + if (no_titlebar.value) + window_flags |= 1 /* NoTitleBar */; + if (no_scrollbar.value) + window_flags |= 8 /* NoScrollbar */; + if (!no_menu.value) + window_flags |= 1024 /* MenuBar */; + if (no_move.value) + window_flags |= 4 /* NoMove */; + if (no_resize.value) + window_flags |= 2 /* NoResize */; + if (no_collapse.value) + window_flags |= 32 /* NoCollapse */; + if (no_close.value) + p_open = null; // Don't pass our bool* to Begin + ImGui.SetNextWindowSize(new imgui_6.ImVec2(550, 680), 4 /* FirstUseEver */); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + ImGui.Text(`dear imgui says hello. (${imgui_1.IMGUI_VERSION})`); + // Menu + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("Menu")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ ShowUserGuide(); + } + if (ImGui.CollapsingHeader("Window options")) { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + if (ImGui.TreeNode("Style")) { + /*ImGui.*/ ShowStyleEditor(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Capture/Logging")) { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Widgets")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const clicked = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + /* static */ const check = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + /* static */ const e = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); + ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(i / 7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr = STATIC("arr_", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + ImGui.Separator(); + ImGui.LabelText("label", "Value"); + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1 = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + // General BeginCombo() API, you have full control over your selection data and display type + const items = ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS"]; + /* static */ const current_item_2 = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) { + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(items); n++) { + const is_selected = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + { + /* static */ const str0 = STATIC("str0", new imgui_4.ImStringBuffer(128, "Hello, world!")); + /* static */ const i0 = STATIC("i0", 123); + /* static */ const f0 = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, imgui_3.IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); + ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); + ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + /* static */ const vec4a = STATIC("vec4a", [0.10, 0.20, 0.30, 0.44]); + ImGui.InputFloat3("input float3", vec4a.value); + } + { + /* static */ const i1 = STATIC("i1#415", 50), i2 = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); + ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + /* static */ const f1 = STATIC("f1#421", 1.00), f2 = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + { + /* static */ const i1 = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); + ShowHelpMarker("CTRL+click to input value."); + /* static */ const f1 = STATIC("f1#427", 0.123), f2 = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + /* static */ const col1 = STATIC("col1", [1.0, 0.0, 0.2]); + /* static */ const col2 = STATIC("col2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit4("color 2", col2.value); + const listbox_items = ["Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon"]; + /* static */ const listbox_item_current = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + /* static */ const listbox_item_current2 = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Trees")) { + if (ImGui.TreeNode("Basic trees")) { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) + console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Advanced, with Selectable nodes")) { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + /* static */ const selection_mask = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(14 /* IndentSpacing */, ImGui.GetFontSize() * 3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags = 128 /* OpenOnArrow */ | 64 /* OpenOnDoubleClick */ | ((selection_mask.value & (1 << i)) ? 1 /* Selected */ : 0); + if (i < 3) { + // Node + const node_open = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= 256 /* Leaf */ | 8 /* NoTreePushOnOpen */; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Collapsing Headers")) { + /* static */ const closable_group = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Bullets")) { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); + ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); + ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text")) { + if (ImGui.TreeNode("Colored Text")) { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new imgui_7.ImVec4(1.0, 0.0, 1.0, 1.0), "Pink"); + ImGui.TextColored(new imgui_7.ImVec4(1.0, 1.0, 0.0, 1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); + ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Word Wrapping")) { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + /* static */ const wrap_width = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + ImGui.Text("Test paragraph 1:"); + let pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("UTF-8 Text")) { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf = STATIC("buf", new imgui_4.ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Images")) { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io = ImGui.GetIO(); + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id = io.Fonts.TexID; + const my_tex_w = io.Fonts.TexWidth; + const my_tex_h = io.Fonts.TexHeight; + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(my_tex_w, my_tex_h), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + const focus_sz = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; + if (focus_x < 0.0) + focus_x = 0.0; + else if (focus_x > my_tex_w - focus_sz) + focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; + if (focus_y < 0.0) + focus_y = 0.0; + else if (focus_y > my_tex_h - focus_sz) + focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0 = new imgui_6.ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1 = new imgui_6.ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(128, 128), uv0, uv1, new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); + let frame_padding = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new imgui_6.ImVec2(32, 32), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(32.0 / my_tex_w, 32 / my_tex_h), frame_padding, new imgui_7.ImVec4(0, 0, 0, 1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Selectables")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const selected = STATIC("selected#672", [false, true, false, false]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], 4 /* AllowDoubleClick */)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) { + /* static */ const selected = STATIC("selected#687", [false, false, false]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); + ImGui.SameLine(300); + ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) { + ImGui.Columns(3, null, false); + /* static */ const selected = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) { + const label = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) { + /* static */ const selected = STATIC("selected#712", [true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true]); + for (let i = 0; i < 16; i++) { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new imgui_6.ImVec2(50, 50))) { + let x = i % 4, y = i / 4; + if (x > 0) + selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) + selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) + selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) + selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) + ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Filtered Text Input")) { + /* static */ const buf1 = STATIC("buf1", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("default", buf1.value, imgui_3.IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2 = STATIC("buf2", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("decimal", buf2.value, imgui_3.IM_ARRAYSIZE(buf2.value), 1 /* CharsDecimal */); + /* static */ const buf3 = STATIC("buf3", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("hexadecimal", buf3.value, imgui_3.IM_ARRAYSIZE(buf3.value), 2 /* CharsHexadecimal */ | 4 /* CharsUppercase */); + /* static */ const buf4 = STATIC("buf4", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("uppercase", buf4.value, imgui_3.IM_ARRAYSIZE(buf4.value), 4 /* CharsUppercase */); + /* static */ const buf5 = STATIC("buf5", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("no blank", buf5.value, imgui_3.IM_ARRAYSIZE(buf5.value), 8 /* CharsNoBlank */); + class TextFilters { + static FilterImGuiLetters(data) { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) + return 0; return 1; } + } + /* static */ const buf6 = STATIC("buf6", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("\"imgui\" letters", buf6.value, imgui_3.IM_ARRAYSIZE(buf6.value), 512 /* CallbackCharFilter */, TextFilters.FilterImGuiLetters); + ImGui.Text("Password input"); + /* static */ const bufpass = STATIC("bufpass", new imgui_4.ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 32768 /* Password */ | 8 /* CharsNoBlank */); + ImGui.SameLine(); + ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 8 /* CharsNoBlank */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-line Text Input")) { + /* static */ const read_only = STATIC("read_only", false); + /* static */ const text = STATIC("text", new imgui_4.ImStringBuffer(1024 * 16, "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, imgui_3.IM_ARRAYSIZE(text.value), new imgui_6.ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), 1024 /* AllowTabInput */ | (read_only.value ? 16384 /* ReadOnly */ : 0)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Plots widgets")) { + /* static */ const animate = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + /* static */ const arr = STATIC("arr", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + ImGui.PlotLines_Array("Frame Times", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset = STATIC("values_offset", 0); + /* static */ const refresh_time = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) { + /* static */ const phase = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value + 1) % imgui_3.IM_ARRAYSIZE(values.value); + phase.value += 0.10 * values_offset.value; + refresh_time.value += 1.0 / 60.0; + } + ImGui.PlotLines_Array("Lines", values.value, imgui_3.IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, imgui_3.IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new imgui_6.ImVec2(0, 80)); + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs { + static Sin(data, i) { return Math.sin(i * 0.1); } + static Saw(data, i) { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type = STATIC("func_type", 0), display_count = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); + ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.Separator(); + // Animate a simple progress bar + /* static */ const progress = STATIC("progress", 0.0), progress_dir = STATIC("progress_dir", 1.0); + if (animate.value) { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { + progress.value = +1.1; + progress_dir.value *= -1.0; + } + if (progress.value <= -0.1) { + progress.value = -0.1; + progress_dir.value *= -1.0; + } + } + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0.0, 0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + const progress_saturated = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf = `${(progress_saturated * 1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0., 0.), buf); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Color/Picker Widgets")) { + /* static */ const color = STATIC("color#863", new imgui_9.ImColor(114, 144, 154, 200).toImVec4()); + /* static */ const hdr = STATIC("hdr", false); + /* static */ const alpha_preview = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview = STATIC("alpha_half_preview", false); + /* static */ const options_menu = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); + ImGui.SameLine(); + ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); + ImGui.SameLine(); + ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags = (hdr.value ? 4096 /* HDR */ : 0) | (alpha_half_preview.value ? 2048 /* AlphaPreviewHalf */ : (alpha_preview.value ? 1024 /* AlphaPreview */ : 0)) | (options_menu.value ? 0 : 8 /* NoOptions */); + ImGui.Text("Color widget:"); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, 16384 /* HSV */ | misc_flags); + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, 131072 /* Float */ | misc_flags); + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); + ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, 32 /* NoInputs */ | 128 /* NoLabel */ | misc_flags); + ImGui.Text("Color button with Custom Picker Popup:"); + // Generate a dummy palette + /* static */ const saved_palette_inited = STATIC("saved_palette_inited", false); + /* static */ const saved_palette = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) { + saved_palette.value[n] = new imgui_7.ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r = [0.0]; + const g = [0.0]; + const b = [0.0]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + /* static */ const backup_color = STATIC("backup_color", new imgui_7.ImVec4()); + let open_popup = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | 256 /* NoSidePreview */ | 16 /* NoSmallPreview */); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(saved_palette.value); n++) { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], 2 /* NoAlpha */ | 4 /* NoPicker */ | 64 /* NoTooltip */, new imgui_6.ImVec2(20, 20))) + color.value.Copy(new imgui_7.ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + if (ImGui.BeginDragDropTarget()) { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new imgui_6.ImVec2(80, 80)); + ImGui.Text("Color picker:"); + /* static */ const alpha = STATIC("alpha", true); + /* static */ const alpha_bar = STATIC("alpha_bar", true); + /* static */ const side_preview = STATIC("side_preview", true); + /* static */ const ref_color = STATIC("ref_color", false); + /* static */ const ref_color_v = STATIC("ref_color_v", new imgui_7.ImVec4(1.0, 0.0, 1.0, 0.5)); + /* static */ const inputs_mode = STATIC("inputs_mode", 2); + /* static */ const picker_mode = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, 32 /* NoInputs */ | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); + ShowHelpMarker("User can right-click the picker to change mode."); + let flags = misc_flags; + if (!alpha.value) + flags |= 2 /* NoAlpha */; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) + flags |= 512 /* AlphaBar */; + if (!side_preview.value) + flags |= 256 /* NoSidePreview */; + if (picker_mode.value === 1) + flags |= 262144 /* PickerHueBar */; + if (picker_mode.value === 2) + flags |= 524288 /* PickerHueWheel */; + if (inputs_mode.value === 1) + flags |= 32 /* NoInputs */; + if (inputs_mode.value === 2) + flags |= 8192 /* RGB */; + if (inputs_mode.value === 3) + flags |= 16384 /* HSV */; + if (inputs_mode.value === 4) + flags |= 32768 /* HEX */; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); + ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(65536 /* Uint8 */ | 16384 /* HSV */); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(131072 /* Float */ | 8192 /* RGB */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Range Widgets")) { + /* static */ const begin = STATIC("begin", 10), end = STATIC("end", 90); + /* static */ const begin_i = STATIC("begin_i", 100), end_i = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-component Widgets")) { + /* static */ const vec4f = STATIC("vec4f", [0.10, 0.20, 0.30, 0.44]); + /* static */ const vec4i = STATIC("vec4i", [1, 5, 100, 255]); + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Vertical Sliders")) { + const spacing = 4; + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(spacing, spacing)); + /* static */ const int_value = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new imgui_6.ImVec2(18, 160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + /* static */ const values = STATIC("values#1072", [0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(7 /* FrameBg */, imgui_9.ImColor.HSV(i / 7.0, 0.5, 0.5)); + ImGui.PushStyleColor(8 /* FrameBgHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.5)); + ImGui.PushStyleColor(9 /* FrameBgActive */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.5)); + ImGui.PushStyleColor(19 /* SliderGrab */, imgui_9.ImColor.HSV(i / 7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(18, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2 = STATIC("values2", [0.20, 0.80, 0.40, 0.25]); + const rows = 3; + const small_slider_size = new imgui_6.ImVec2(18, (160.0 - (rows - 1) * spacing) / rows); + for (let nx = 0; nx < 4; nx++) { + if (nx > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) { + ImGui.PushID(nx * rows + ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(15 /* GrabMinSize */, 40); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(40, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Layout")) { + if (ImGui.TreeNode("Child regions")) { + /* static */ const disable_mouse_wheel = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + ImGui.Text("Without border"); + /* static */ const line = STATIC("line", 50); + let goto_line = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, 32 /* EnterReturnsTrue */) || goto_line; + ImGui.PopItemWidth(); + ImGui.BeginChild("Sub1", new imgui_6.ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5, 300), false, 2048 /* HorizontalScrollbar */ | (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + for (let i = 0; i < 100; i++) { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + ImGui.SameLine(); + ImGui.PushStyleVar(5 /* ChildRounding */, 5.0); + ImGui.BeginChild("Sub2", new imgui_6.ImVec2(0, 300), true, (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) { + if (i === 50) + ImGui.NextColumn(); + const buf = `${("00000000" + (i * 5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new imgui_6.ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Widgets Width")) { + /* static */ const f = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); + ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Basic Horizontal Layout")) { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + // Text + ImGui.Text("Two items: Hello"); + ImGui.SameLine(); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Adjust spacing + ImGui.Text("More spacing: Hello"); + ImGui.SameLine(0, 20); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); + ImGui.SameLine(); + ImGui.Button("Banana"); + ImGui.SameLine(); + ImGui.Button("Apple"); + ImGui.SameLine(); + ImGui.Button("Corniflower"); + // Button + ImGui.Text("Small buttons"); + ImGui.SameLine(); + ImGui.SmallButton("Like this one"); + ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.Text("x=150"); + ImGui.SameLine(300); + ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.SmallButton("x=150"); + ImGui.SameLine(300); + ImGui.SmallButton("x=300"); + // Checkbox + /* static */ const c1 = STATIC("c1", false), c2 = STATIC("c2", false), c3 = STATIC("c3", false), c4 = STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + // Various + /* static */ const f0 = STATIC("f0#1255", 1.0), f1 = STATIC("f1#1255", 2.0), f2 = STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items = ["AAAA", "BBBB", "CCCC", "DDDD"]; + /* static */ const item = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0, 5.0); + ImGui.PopItemWidth(); + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection = STATIC("selection", [0, 1, 2, 3]); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + // Dummy + const sz = new imgui_6.ImVec2(30, 30); + ImGui.Button("A", sz); + ImGui.SameLine(); + ImGui.Dummy(sz); + ImGui.SameLine(); + ImGui.Button("B", sz); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Groups")) { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size = ImGui.GetItemRectSize(); + const values = [0.5, 0.20, 0.80, 0.60, 0.25]; + ImGui.PlotHistogram_Array("##values", values, imgui_3.IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + ImGui.Button("ACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text Baseline Alignment")) { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + ImGui.Text("One\nTwo\nThree"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + ImGui.Button("HOP##1"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("HOP##2"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("TEST##1"); + ImGui.SameLine(); + ImGui.Text("TEST"); + ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); + ImGui.SameLine(); + ImGui.Button("Widget##1"); + ImGui.SameLine(); + ImGui.Text("Widget"); + ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); + ImGui.SameLine(); + ImGui.Button("Widget##3"); + // Tree + const spacing = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##2"); + if (node_open) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##4"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Scrolling")) { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track = STATIC("track", true); + /* static */ const track_line = STATIC("track_line", 50), scroll_to_px = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); + track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); + scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) + track.value = false; + for (let i = 0; i < 5; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new imgui_6.ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) { + if (track.value && line === track_line.value) { + ImGui.TextColored(new imgui_9.ImColor(255, 255, 0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y = ImGui.GetScrollY(), scroll_max_y = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.Bullet(); + ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); + ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(10 /* FrameRounding */, 3.0); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, ImGui.GetFrameHeightWithSpacing() * 7 + 30), true, 2048 /* HorizontalScrollbar */); + for (let line = 0; line < lines.value; line++) { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) { + if (n > 0) + ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf = n.toFixed(0); + const label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; + const hue = n * 0.05; + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new imgui_6.ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x = ImGui.GetScrollX(), scroll_max_x = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta = 0.0; + ImGui.SmallButton("<<"); + if (ImGui.IsItemActive()) + scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text("Scroll from code"); + ImGui.SameLine(); + ImGui.SmallButton(">>"); + if (ImGui.IsItemActive()) + scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Clipping")) { + /* static */ const size = STATIC("size", new imgui_6.ImVec2(100, 100)), offset = STATIC("offset", new imgui_6.ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos = ImGui.GetCursorScreenPos(); + const clip_rect = new imgui_7.ImVec4(pos.x, pos.y, pos.x + size.value.x, pos.y + size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { + offset.value.x += ImGui.GetIO().MouseDelta.x; + offset.value.y += ImGui.GetIO().MouseDelta.y; + } + ImGui.GetWindowDrawList().AddRectFilled(pos, new imgui_6.ImVec2(pos.x + size.value.x, pos.y + size.value.y), imgui_8.IM_COL32(90, 90, 120, 255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize() * 2.0, new imgui_6.ImVec2(pos.x + offset.value.x, pos.y + offset.value.y), imgui_8.IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Popups & Modal windows")) { + if (ImGui.TreeNode("Popups")) { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + /* static */ const selected_fish = STATIC("selected_fish", -1); + const names = ["Bream", "Haddock", "Mackerel", "Pollock", "Tilefish"]; + /* static */ const toggles = STATIC("toggles", [true, false, false, false, false]); + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Context menus")) { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) { + if (ImGui.Selectable("Set to zero")) + value.value = 0.0; + if (ImGui.Selectable("Set to PI")) + value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + /* static */ const name = STATIC("name", new imgui_4.ImStringBuffer(32, "Label1")); + const buf = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, imgui_3.IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); + ImGui.Text("(<-- right-click here)"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Modals")) { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, 64 /* AlwaysAutoResize */)) { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + /* static */ const dont_ask_me_next_time = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + if (ImGui.Button("OK", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color = STATIC("color#2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Menus inside a regular window")) { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Columns")) { + ImGui.PushID("Columns"); + // Basic columns + if (ImGui.TreeNode("Basic")) { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) { + const label = `Item ${n}`; + if (ImGui.Selectable(label)) { } + if (ImGui.Button(label, new imgui_6.ImVec2(-1, 0))) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); + ImGui.NextColumn(); + ImGui.Text("Name"); + ImGui.NextColumn(); + ImGui.Text("Path"); + ImGui.NextColumn(); + ImGui.Text("Hovered"); + ImGui.NextColumn(); + ImGui.Separator(); + const names = ["One", "Two", "Three"]; + const paths = ["/path/one", "/path/two", "/path/three"]; + /* static */ const selected = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) { + const label = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, 2 /* SpanAllColumns */)) + selected.value = i; + const hovered = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); + ImGui.NextColumn(); + ImGui.Text(paths[i]); + ImGui.NextColumn(); + ImGui.Text(`${hovered}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category A")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Borders")) { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders = STATIC("h_borders", true); + /* static */ const v_borders = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4 * 3; i++) { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.SetNextWindowContentSize(new imgui_6.ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 20), false, 2048 /* HorizontalScrollbar */); + ImGui.Columns(10); + const ITEMS_COUNT = 2000; + const clipper = new imgui_13.ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + const node_open = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); + ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { + ImGui.BulletText("Sailor"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { + ImGui.BulletText("Marin"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + if (ImGui.CollapsingHeader("Filtering")) { + /* static */ const filter = STATIC("filter#1864", new imgui_11.ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines = ["aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world"]; + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + if (ImGui.CollapsingHeader("Inputs & Focus")) { + const io = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); + ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + if (ImGui.TreeNode("Keyboard & Mouse State")) { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (io.MouseDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Mouse clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse dbl-clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseDoubleClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse released:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseReleased(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + ImGui.Text("Keys down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (io.KeysDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Keys pressed:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyPressed(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text("Keys release:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyReleased(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Tabbing")) { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf = STATIC("buf1#1921", new imgui_4.ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focus from code")) { + const focus_1 = ImGui.Button("Focus on 1"); + ImGui.SameLine(); + const focus_2 = ImGui.Button("Focus on 2"); + ImGui.SameLine(); + const focus_3 = ImGui.Button("Focus on 3"); + let has_focus = 0; + /* static */ const buf = STATIC("buf2#1944", new imgui_4.ImStringBuffer(128, "click on a button to set focus")); + if (focus_1) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 1; + if (focus_2) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 2; + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focused & Hovered Test")) { + /* static */ const embed_all_inside_a_child_window = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 25), true); + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(1 /* ChildWindows */)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(2 /* RootWindow */)}\n`); + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(1 /* ChildWindows */)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(2 /* RootWindow */)}\n"`); + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText(`IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(32 /* AllowWhenOverlapped */)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(52 /* RectOnly */)}\n`); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Dragging")) { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) { + // Draw a line between the button and the mouse cursor + const draw_list = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[21 /* Button */]), 4.0); + draw_list.PopClipRect(); + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold = ImGui.GetMouseDragDelta(0); + const mouse_delta = io.MouseDelta; + ImGui.SameLine(); + ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Mouse cursors")) { + const mouse_cursors_names = ["Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE"]; + imgui_2.IM_ASSERT(imgui_3.IM_ARRAYSIZE(mouse_cursors_names) === 7 /* COUNT */); + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); + ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < 7 /* COUNT */; i++) { + const label = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); + ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + ImGui.End(); +} +exports.ShowDemoWindow = ShowDemoWindow; +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +function ShowStyleSelector(label) { + /* static */ const style_idx = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) { + switch (style_idx.value) { + case 0: + ImGui.StyleColorsClassic(); + break; + case 1: + ImGui.StyleColorsDark(); + break; + case 2: + ImGui.StyleColorsLight(); + break; + } + return true; + } + return false; +} +exports.ShowStyleSelector = ShowStyleSelector; +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +function ShowFontSelector(label) { + const io = ImGui.GetIO(); + const font_current = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker("- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} +exports.ShowFontSelector = ShowFontSelector; +function ShowStyleEditor(ref = null) { + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style = ImGui.GetStyle(); + /* static */ const ref_saved_style = STATIC("ref_saved_style", new imgui_10.ImGuiStyle()); + // Default to using internal storage as reference + /* static */ const init = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + if (ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ ShowFontSelector("Fonts##Selector"); + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { + let window_border = (style.WindowBorderSize > 0.0); + if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) + style.WindowBorderSize = window_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let frame_border = (style.FrameBorderSize > 0.0); + if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) + style.FrameBorderSize = frame_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let popup_border = (style.PopupBorderSize > 0.0); + if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) + style.PopupBorderSize = popup_border ? 1.0 : 0.0; + } + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + if (ImGui.TreeNode("Rendering")) { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); + ImGui.SameLine(); + ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) + style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Settings")) { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); + ImGui.SameLine(); + ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Colors")) { + /* static */ const output_dest = STATIC("output_dest", 0); + /* static */ const output_only_modified = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < 43 /* COUNT */; i++) { + const col = style.Colors[i]; + const name = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); + ImGui.PushItemWidth(120); + ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + /* static */ const filter = STATIC("filter#2223", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + /* static */ const alpha_flags = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, 1024 /* AlphaPreview */); + ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, 2048 /* AlphaPreviewHalf */); + ImGui.BeginChild("#colors", new imgui_6.ImVec2(0, 300), true, 16384 /* AlwaysVerticalScrollbar */ | 32768 /* AlwaysHorizontalScrollbar */); + ImGui.PushItemWidth(-160); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], 512 /* AlphaBar */ | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Save")) + ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Revert")) + style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + ImGui.TreePop(); + } + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened = ImGui.TreeNode("Fonts"); + if (fonts_opened) { + const atlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) { + ImGui.Image(atlas.TexID, new imgui_6.ImVec2(atlas.TexWidth, atlas.TexHeight), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_9.ImColor(255, 255, 255, 255).Value, new imgui_9.ImColor(255, 255, 255, 128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + ImGui.PopItemWidth(); +} +exports.ShowStyleEditor = ShowStyleEditor; +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar() { + if (ImGui.BeginMainMenuBar()) { + if (ImGui.BeginMenu("File")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) { + if (ImGui.MenuItem("Undo", "CTRL+Z")) { } + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) { } // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) { } + if (ImGui.MenuItem("Copy", "CTRL+C")) { } + if (ImGui.MenuItem("Paste", "CTRL+V")) { } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} +function ShowExampleMenuFile() { + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) { } + if (ImGui.MenuItem("Open", "Ctrl+O")) { } + if (ImGui.BeginMenu("Open Recent")) { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) { } + if (ImGui.MenuItem("Save As..")) { } + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) { + /* static */ const enabled = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f = STATIC("f#2408", 0.5); + /* static */ const n = STATIC("n", 0); + /* static */ const b = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) { + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) { + imgui_2.IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) { } + if (ImGui.MenuItem("Quit", "Alt+F4")) { } +} +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open) { + if (!ImGui.Begin("Example: Auto-resizing window", p_open, 64 /* AlwaysAutoResize */)) { + ImGui.End(); + return; + } + /* static */ const lines = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open) { + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static Square(data) { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + static Step(data) { + const step = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + /* static */ const auto_resize = STATIC("auto_resize", false); + /* static */ const type = STATIC("type", 0); + /* static */ const display_lines = STATIC("display_lines", 10); + if (type.value === 0) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 0), new imgui_6.ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, -1), new imgui_6.ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(100, 100), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(400, -1), new imgui_6.ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 400), new imgui_6.ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100); // Fixed Step + const flags = auto_resize.value ? 64 /* AlwaysAutoResize */ : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) { + const desc = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(200, 200)); + } + ImGui.SameLine(); + if (ImGui.Button("500x500")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(500, 500)); + } + ImGui.SameLine(); + if (ImGui.Button("800x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(800, 200)); + } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, imgui_3.IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open) { + const DISTANCE = 10.0; + /* static */ const corner = STATIC("corner", 0); + const window_pos = new imgui_6.ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot = new imgui_6.ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, 1 /* Always */, window_pos_pivot); + ImGui.PushStyleColor(2 /* WindowBg */, new imgui_7.ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, 1 /* NoTitleBar */ | 2 /* NoResize */ | 64 /* AlwaysAutoResize */ | 4 /* NoMove */ | 256 /* NoSavedSettings */)) { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) + corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) + corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) + corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) + corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open) { + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 100), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 200), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf = `Animated title ${"|/-\\".charAt((ImGui.GetTime() / 0.25) & 3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 300), 4 /* FirstUseEver */); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(350, 560), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Custom rendering", p_open)) { + ImGui.End(); + return; + } + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list = ImGui.GetWindowDrawList(); + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz = STATIC("sz", 36.0); + /* static */ const col = STATIC("color#2583", new imgui_7.ImVec4(1.0, 1.0, 0.4, 1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value); + { + const p = ImGui.GetCursorScreenPos(); + const col32 = imgui_8.IM_COL32(col.value.x * 255, col.value.y * 255, col.value.z * 255, col.value.w * 255); + let x = p.x + 4.0, y = p.y + 4.0, spacing = 8.0; + for (let n = 0; n < 2; n++) { + const thickness = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 20, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 0.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */, thickness); + x += sz.value + spacing; + draw_list.AddTriangle(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x, y + sz.value), col32, thickness); + x += spacing; + draw_list.AddBezierCurve(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value * 1.3, y + sz.value * 0.3), new imgui_6.ImVec2(x + sz.value - sz.value * 1.3, y + sz.value - sz.value * 0.3), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x = p.x + 4; + y += sz.value + spacing; + } + draw_list.AddCircleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */); + x += sz.value + spacing; + draw_list.AddTriangleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32); + x += sz.value + spacing; + draw_list.AddRectFilledMultiColor(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), imgui_8.IM_COL32(0, 0, 0), imgui_8.IM_COL32(255, 0, 0), imgui_8.IM_COL32(255, 255, 0), imgui_8.IM_COL32(0, 255, 0)); + ImGui.Dummy(new imgui_6.ImVec2((sz.value + spacing) * 8, (sz.value + spacing) * 3)); + } + ImGui.Separator(); + { + /* static */ const points = STATIC("points", new imgui_5.ImVector()); + /* static */ const adding_line = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) + points.value.clear(); + if (points.value.Size >= 2) { + ImGui.SameLine(); + if (ImGui.Button("Undo")) { + points.value.pop_back(); + points.value.pop_back(); + } + } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) + canvas_size.x = 50.0; + if (canvas_size.y < 50.0) + canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(50, 50, 50), imgui_8.IM_COL32(50, 50, 60), imgui_8.IM_COL32(60, 60, 70), imgui_8.IM_COL32(50, 50, 60)); + draw_list.AddRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(255, 255, 255)); + let adding_preview = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas = new imgui_6.ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) { + if (!adding_line.value && ImGui.IsMouseClicked(0)) { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i + 1].x, canvas_pos.y + points.value.Data[i + 1].y), imgui_8.IM_COL32(255, 255, 0, 255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + constructor() { + // char InputBuf[256]; + this.InputBuf = new imgui_4.ImStringBuffer(256, ""); + // ImVector Items; + this.Items = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + // ImVector History; + this.History = new imgui_5.ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + this.HistoryPos = -1; + // ImVector Commands; + this.Commands = new imgui_5.ImVector(); + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + delete() { } + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + ClearLog() { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + // void Draw(const char* title, bool* p_open) + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin(title, p_open)) { + ImGui.End(); + return; + } + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + // TODO: display items starting from the bottom + if (ImGui.SmallButton("Add Dummy Text")) { + this.AddLog(`${this.Items.Size} some text`); + this.AddLog("some more text"); + this.AddLog("display very important message here!"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { + this.AddLog("[error] something went wrong"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { + this.ClearLog(); + } + ImGui.SameLine(); + const copy_to_clipboard = ImGui.SmallButton("Copy"); + ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) + this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + ImGui.Separator(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + /* static */ const filter = STATIC("filter#2763", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + const footer_height_to_reserve = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new imgui_6.ImVec2(0, -footer_height_to_reserve), false, 2048 /* HorizontalScrollbar */); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.Selectable("Clear")) + this.ClearLog(); + ImGui.EndPopup(); + } + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(4, 1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) { + // const char* item = Items[i]; + const item = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col = new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) + col = new imgui_7.ImVec4(1.0, 0.4, 0.4, 1.0); + else if (/^# /.test(item)) + col = new imgui_7.ImVec4(1.0, 0.78, 0.58, 1.0); + ImGui.PushStyleColor(0 /* Text */, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + // Command-line + if (ImGui.InputText("Input", this.InputBuf, imgui_3.IM_ARRAYSIZE(this.InputBuf), 32 /* EnterReturnsTrue */ | 64 /* CallbackCompletion */ | 128 /* CallbackHistory */, ExampleAppConsole.TextEditCallbackStub, this)) { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(3 /* RootAndChildWindows */) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + ImGui.End(); + } + // void ExecCommand(const char* command_line) + ExecCommand(command_line) { + this.AddLog(`# ${command_line}\n`); + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size - 1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") { + this.ClearLog(); + } + else if (command_line.toUpperCase() === "HELP") { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + else if (command_line.toUpperCase() === "HISTORY") { + const first = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data) { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console = data.UserData; + return console.TextEditCallback(data); + } + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data) { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) { + case 64 /* CallbackCompletion */: + { + // Example of TEXT COMPLETION + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + break; + } + case 128 /* CallbackHistory */: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} +function ShowExampleAppConsole(p_open) { + /* static */ const console = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog { + constructor() { + // ImGuiTextBuffer Buf; + this.Buf = new imgui_12.ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + this.Filter = new imgui_11.ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + this.LineOffsets = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + } + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear() { this.Buf.clear(); this.LineOffsets.clear(); } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + let old_size = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 400), 4 /* FirstUseEver */); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) + this.Clear(); + ImGui.SameLine(); + const copy = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, 0), false, 2048 /* HorizontalScrollbar */); + if (copy) + ImGui.LogToClipboard(); + if (this.Filter.IsActive()) { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else { + ImGui.TextUnformatted(this.Buf.begin()); + } + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open) { + /* static */ const log = STATIC("log#3073", new ExampleAppLog()); + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time = STATIC("last_time", -1.0); + const time = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) { + const random_words = ["system", "info", "warning", "error", "fatal", "notice", "log"]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * imgui_3.IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + log.value.Draw("Example: Log", p_open); +} +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 440), 4 /* FirstUseEver */); + if (ImGui.Begin("Example: Layout", p_open, 1024 /* MenuBar */)) { + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("File")) { + if (ImGui.MenuItem("Close")) + p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + // left + /* static */ const selected = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new imgui_6.ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) { + const label = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new imgui_6.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) { } + ImGui.SameLine(); + if (ImGui.Button("Save")) { } + ImGui.EndGroup(); + } + ImGui.End(); +} +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(430, 450), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Property editor", p_open)) { + ImGui.End(); + return; + } + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2, 2)); + ImGui.Columns(2); + ImGui.Separator(); + class funcs { + static ShowDummyObject(prefix, uid) { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) { + /* static */ const dummy_members = STATIC("dummy_members", [0.0, 0.0, 1.0, 3.1416, 100.0, 999.0]); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) { + funcs.ShowDummyObject("Child", 424242); + } + else { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref = [dummy_members.value[i] || 0]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Long text display", p_open)) { + ImGui.End(); + return; + } + /* static */ const test_type = STATIC("test_type", 0); + /* static */ const log = STATIC("log#3217", new imgui_12.ImGuiTextBuffer()); + /* static */ const lines = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { + log.value.clear(); + lines.value = 0; + } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value + i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + const clipper = new imgui_13.ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} +// End of Demo code +// #else +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} +// #endif +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2RlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQixjQUFjOztBQUVkLGlHQUFpRztBQUNqRyxzSUFBc0k7QUFDdEksdUdBQXVHO0FBQ3ZHLGdKQUFnSjtBQUNoSiwwSkFBMEo7QUFDMUosMEZBQTBGO0FBQzFGLHNLQUFzSztBQUN0Syx3SEFBd0g7QUFDeEgsYUFBYTtBQUNiLCtEQUErRDtBQUUvRCxzSkFBc0o7QUFDdEosaUpBQWlKO0FBQ2pKLHNJQUFzSTtBQUN0SSw0SkFBNEo7QUFDNUosa0tBQWtLO0FBRWxLLDZEQUE2RDtBQUM3RCxrQ0FBa0M7QUFDbEMsU0FBUztBQUVULHFCQUFxQjtBQUNyQixrREFBa0Q7QUFDbEQsd0VBQXdFO0FBQ3hFLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsb0VBQW9FO0FBQ3BFLDBDQUEwQztBQUMxQyxRQUFRO0FBQ1IsMENBQTBDO0FBQzFDLFNBQVM7QUFFVCxpQ0FBaUM7QUFDakMsbUNBQXdDO0FBQ3hDLG1DQUFvQztBQUNwQyxtQ0FBdUM7QUFDdkMsbUNBQXlDO0FBcUJ6QyxtQ0FBbUM7QUFDbkMsbUNBQW1EO0FBQ25ELG1DQUFtRDtBQUNuRCxtQ0FBbUM7QUFDbkMsbUNBQWtDO0FBRWxDLG9DQUFxQztBQUVyQyxvQ0FBMEM7QUFDMUMsb0NBQTBDO0FBQzFDLG9DQUEyQztBQUkzQyxrQkFBa0I7QUFDbEIsa0lBQWtJO0FBQ2xJLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLCtKQUErSjtBQUMvSixzTUFBc007QUFDdE0sZ0lBQWdJO0FBQ2hJLDhIQUE4SDtBQUM5SCx3VEFBd1Q7QUFDeFQsMkNBQTJDO0FBQzNDLHFJQUFxSTtBQUNySSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLDZIQUE2SDtBQUM3SCw0SUFBNEk7QUFDNUksNkpBQTZKO0FBQzdKLG1JQUFtSTtBQUNuSSxzQkFB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QUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzlMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUMzQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUss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LEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2hILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDaEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDbEUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXJCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQzlDLENBQUM7WUFDRyxLQUFLLENBQUMsV0FBVyxDQUFDLGdGQUFnRixDQUFDLENBQUM7WUFFcEcsT0FBTztZQUNQLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRWpELGlCQUFpQjtZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRWpELFNBQVM7WUFDVCxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFNUIsU0FBUztZQUNULEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFFM0Msb0RBQW9EO1lBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVoRCxXQUFXO1lBQ1gsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFrQixNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFDLEVBQUUsR0FBa0IsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBQyxFQUFFLEdBQWtCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUMsRUFBRSxHQUFrQixNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25MLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDL0UsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9FLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFFL0QsVUFBVTtZQUNWLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBaUIsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQWlCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFpQixNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlJLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQWEsQ0FBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUUsQ0FBQztZQUMzRCxZQUFZLENBQUMsTUFBTSxJQUFJLEdBQW1CLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsb0JBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9HLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBQyxHQUFHLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxRixLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUYsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hFLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckIsWUFBWSxDQUFDLE1BQU0sU0FBUyxHQUEwQixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDMUIsQ0FBQztnQkFDRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLG9CQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNkLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4RSxDQUFDO1lBQ0QsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRXJCLFFBQVE7WUFDUixNQUFNLEVBQUUsR0FBcUIsSUFBSSxjQUFNLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQzdCLENBQUM7WUFDRyxLQUFLLENBQUMsV0FBVyxDQUFDLDhNQUE4TSxDQUFDLENBQUM7WUFDbE8sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLENBQUM7Z0JBQ0csS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNuQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNuQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3RCLEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsZ0VBQWdFO1lBQ2hFLE1BQU0sSUFBSSxHQUFXLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3QyxNQUFNLE1BQU0sR0FBa0IsQ0FBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLENBQUM7WUFDOUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsb0JBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFN0YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxjQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVqQixLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVqQixLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFdEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FDOUMsQ0FBQztZQUNHLEtBQUssQ0FBQyxXQUFXLENBQUMsc05BQXNOLENBQUMsQ0FBQztZQUUxTyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXJCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVyQixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVyQixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU3QixLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLDRFQUE0RTtZQUM3RyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUxQixPQUFPO1lBQ1AsTUFBTSxPQUFPLEdBQVcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUM1RCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBQyxDQUFDLENBQUksa0JBQWtCO1lBRXRJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQVMsZ0pBQWdKO1lBQ3pMLE1BQU0sU0FBUyxHQUFZLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBRSwrR0FBK0c7WUFDdEssS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUFDLENBQUMsQ0FBRyxrQkFBa0I7WUFFckgsU0FBUztZQUNULEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0IsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUVoQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV4RCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDaEMsQ0FBQztZQUNHLEtBQUssQ0FBQyxXQUFXLENBQUMsNkVBQTZFLENBQUMsQ0FBQztZQUNqRyxZQUFZLENBQUMsTUFBTSxLQUFLLEdBQW9CLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEUsWUFBWSxDQUFDLE1BQU0sVUFBVSxHQUFtQixNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksR0FBbUIsTUFBTSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNySSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM5SixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ2pLLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFFbkMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQzFCLENBQUM7Z0JBQ0csRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxjQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekYsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUNWLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3hGLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUNyQyxDQUFDO29CQUNHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDN0MsQ0FBQzt3QkFDRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksZUFBTyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUMxRCxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLG9DQUFvQztvQkFDdkUsQ0FBQztvQkFDRCxJQUFJLENBQ0osQ0FBQzt3QkFDRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDL0IsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU0sUUFBUSxHQUFXLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxZQUFZLEdBQVcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxRixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUNELEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQzNDLENBQUM7WUFDRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFBQyxLQUFLLENBQUMsV0FBVyxDQUFDLG1IQUFtSCxDQUFDLENBQUM7WUFDdkosS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyx5R0FBeUcsQ0FBQyxDQUFDO1lBQzdJLFlBQVksQ0FBQyxNQUFNLEtBQUssR0FBbUIsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUUsS0FBSyxDQUFDLFlBQVkseUJBQThCLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELEtBQUssQ0FBQyxZQUFZLHVCQUE2QixJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEdBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksaUNBQXVDLENBQUM7WUFDbkksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUM3QyxDQUFDO2dCQUNHLHFMQUFxTDtnQkFDckwsa0xBQWtMO2dCQUNsTCxNQUFNLFdBQVcsR0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFDcEMsQ0FBQztvQkFDRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO29CQUM5QixNQUFNLE9BQU8sR0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxNQUFNLEtBQUssR0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQy9GLE1BQU0sR0FBRyxHQUFXLENBQUMsR0FBQyxJQUFJLENBQUM7b0JBQzNCLEtBQUssQ0FBQyxjQUFjLGtCQUFrQixlQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsS0FBSyxDQUFDLGNBQWMseUJBQXlCLGVBQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN6RSxLQUFLLENBQUMsY0FBYyx3QkFBd0IsZUFBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3hFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksY0FBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdkUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFXLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxZQUFZLEdBQVcsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFGLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksY0FBYyxHQUFXLEdBQUcsQ0FBQztZQUNqQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hILEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hILEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsS0FBSyxHQUFHLENBQUMsQ0FDM0IsQ0FBQztnQkFDRyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMseUlBQXlJO2dCQUN4SyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztnQkFDdEQsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDL0IsQ0FBQztZQUNHLFlBQVksQ0FBQyxNQUFNLElBQUksR0FBbUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQW1CLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxjQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUksS0FBSyxDQUFDLFdBQVcsQ0FBQywyUUFBMlEsQ0FBQyxDQUFDO1lBQy9SLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sR0FBRyxHQUFxQixLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFNBQVMsR0FBcUIsSUFBSSxjQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUFDLENBQUM7WUFDcEosS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLGNBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekgsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUMsR0FBRyxFQUFFLElBQUksY0FBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLENBQUMsR0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFRLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLEVBQUUsK0JBQStCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxTixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztJQUNMLENBQUM7SUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUNyRCxDQUFDO1FBQ0csRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUM3QixDQUFDO1lBQ0csS0FBSyxDQUFDLFdBQVcsQ0FBQywrSEFBK0gsQ0FBQyxDQUFDO1lBRW5KLFlBQVksQ0FBQyxNQUFNLGFBQWEsR0FBbUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sS0FBSyxHQUFhLENBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBRSxDQUFDO1lBQ2xGLFlBQVksQ0FBQyxNQUFNLE9BQU8sR0FBc0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUUsQ0FBQyxDQUFDO1lBRXhHLHlCQUF5QjtZQUN6QixnTEFBZ0w7WUFDaEwsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQy9CLENBQUM7Z0JBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUN4QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixhQUFhLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQy9CLENBQUM7Z0JBQ0csR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUM1QyxDQUFDO29CQUNHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUN6RixDQUFDO2dCQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDaEMsQ0FBQztvQkFDRyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUMzQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLENBQUM7Z0JBRUQsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3RCLEtBQUssQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsQ0FBQztnQkFFcEQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDckMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUN0QyxDQUFDO29CQUNHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDNUMsQ0FBQzt3QkFDRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztvQkFDekYsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQ2hDLENBQUM7d0JBQ0csS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDM0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNwQixDQUFDO29CQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUNsQyxDQUFDO2dCQUNHLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBRUQsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQ3BDLENBQUM7WUFDRyxvR0FBb0c7WUFDcEcsK0NBQStDO1lBQy9DLHVCQUF1QjtZQUN2Qiw0QkFBNEI7WUFDNUIsNklBQTZJO1lBQzdJLFlBQVksQ0FBQyxNQUFNLEtBQUssR0FBbUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDdkUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO2dCQUN2RCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2dCQUN4RCxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzFGLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFFRCxZQUFZLENBQUMsTUFBTSxJQUFJLEdBQTJCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxzQkFBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25HLE1BQU0sR0FBRyxHQUFXLFdBQVcsSUFBSSxXQUFXLENBQUMsQ0FBQyx3REFBd0Q7WUFDeEcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUNsQyxDQUFDO2dCQUNHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsb0JBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzlCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBRXZELEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUM3QixDQUFDO1lBQ0csS0FBSyxDQUFDLFdBQVcsQ0FBQyw4RkFBOEYsQ0FBQyxDQUFDO1lBRWxILEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSw0QkFBb0MsQ0FBQyxDQUM5RSxDQUFDO2dCQUNHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztnQkFDL0YsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUVsQix5Q0FBeUM7Z0JBQ3pDLDREQUE0RDtnQkFFNUQsWUFBWSxDQUFDLE1BQU0scUJBQXFCLEdBQW9CLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkcsS0FBSyxDQUFDLFlBQVksdUJBQTZCLElBQUksY0FBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxLQUFLLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUN2SCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRXBCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFBQyxDQUFDO2dCQUN6RSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFBQyxDQUFDO2dCQUM3RSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDakMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ3ZDLENBQUM7Z0JBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO2dCQUM3RyxZQUFZLENBQUMsTUFBTSxJQUFJLEdBQW1CLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ3JHLFlBQVksQ0FBQyxNQUFNLEtBQUssR0FBNkIsTUFBTSxDQUFtQixTQUFTLEVBQUUsQ0FBRSxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUUsQ0FBQyxDQUFDO2dCQUM5RyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxrRUFBa0U7Z0JBRTNHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUN2QyxDQUFDO29CQUNHLEtBQUssQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztvQkFDNUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdEIsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQzlCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN0QixLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFFRCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUNwRCxDQUFDO1lBQ0csS0FBSyxDQUFDLFdBQVcsQ0FBQyxrR0FBa0csQ0FBQyxDQUFDO1lBQ3RILEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixtSkFBbUo7WUFDbkosdUtBQXVLO1lBQ3ZLLHNLQUFzSztZQUN0SyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUNwRCxDQUFDO2dCQUNHLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0wsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUN0QyxDQUFDO1FBQ0csS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4QixnQkFBZ0I7UUFDaEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUM1QixDQUFDO1lBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFFLG9CQUFvQjtZQUM1RCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQzNCLENBQUM7Z0JBQ0csTUFBTSxLQUFLLEdBQVcsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO2dCQUMvQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7Z0JBQzdDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtZQUNyRCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQWtCLENBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUUsQ0FBQztZQUN2RCxNQUFNLEtBQUssR0FBa0IsQ0FBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBRSxDQUFDO1lBQ3pFLFlBQVksQ0FBQyxNQUFNLFFBQVEsR0FBbUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUMxQixDQUFDO2dCQUNHLE1BQU0sS0FBSyxHQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxLQUFLLENBQUMseUJBQXNDLENBQUM7b0JBQ25GLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixNQUFNLE9BQU8sR0FBWSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9DLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN6QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakQsQ0FBQztZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FDbEMsQ0FBQztZQUNHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVsQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkIsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRW5CLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixZQUFZLENBQUMsTUFBTSxHQUFHLEdBQW1CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbEMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRW5CLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QixZQUFZLENBQUMsTUFBTSxHQUFHLEdBQW1CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFbkIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9GLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvRixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUNwQyxDQUFDO1lBQ0csS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDbEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxXQUFXLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsV0FBVyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7WUFDbEUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDOUIsQ0FBQztZQUNHLG9FQUFvRTtZQUNwRSxZQUFZLENBQUMsTUFBTSxTQUFTLEdBQW9CLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUUsWUFBWSxDQUFDLE1BQU0sU0FBUyxHQUFvQixNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDbkYsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDakYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQzVCLENBQUM7Z0JBQ0csRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RCLDZDQUE2QztnQkFDN0MsTUFBTSxDQUFDLEdBQVcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELG9CQUFvQjtRQUNwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUF1QkU7UUFFRixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FDM0MsQ0FBQztZQUNHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxLQUFLLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxpQ0FBdUMsQ0FBQztZQUM1SCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sV0FBVyxHQUFXLElBQUksQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBcUIsSUFBSSx5QkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLG9EQUFvRDtZQUMxSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFDckIsQ0FBQztnQkFDRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRTtvQkFDMUQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQzNCLENBQUM7d0JBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN2QyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3ZCLENBQUM7WUFDVCxDQUFDO1lBQ0QscURBQXFEO1lBQ3JELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQVksS0FBSyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3JFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUFDLGNBQWMsQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO1FBQzlILEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNkLENBQUM7WUFDRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ3hDLENBQUM7UUFDRyxZQUFZLENBQUMsTUFBTSxNQUFNLEdBQTRCLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSx3QkFBZSxDQUFDLENBQUM7UUFDaEcsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUI7Y0FDZCxvQ0FBb0M7Y0FDcEMsbURBQW1EO2NBQ25ELDhEQUE4RDtjQUM5RCw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQWEsQ0FBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFFLENBQUM7UUFDdEgsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN4QyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FDN0MsQ0FBQztRQUNHLE1BQU0sRUFBRSxHQUFZLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDakcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQUMsY0FBYyxDQUFDLG9XQUFvVyxDQUFDLENBQUM7UUFFdlksS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN2RCxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQzdELEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRWpELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1lBQ0csRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLElBQUk7Z0JBQ0EsS0FBSyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUcsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ2pOLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQVksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxDQUFDO29CQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3BLLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQVksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUFDLENBQUM7WUFDcEssS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFTLENBQUM7b0JBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUFDLENBQUM7WUFDcEssS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRXZELEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUssQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQy9NLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxD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QUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzdJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzlJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQ0FBb0QsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUM3SyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxF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QUFFLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSx1REFBdUQ7UUFDMUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QixFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVELHFHQUFxRztBQUNyRywrSEFBK0g7QUFDL0g7SUFjSTtRQWJBLHVDQUF1QztRQUN2QyxhQUFRLEdBQW1CLElBQUksc0JBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsK0JBQStCO1FBQy9CLFVBQUssR0FBcUIsSUFBSSxnQkFBUSxFQUFVLENBQUM7UUFDakQsd0NBQXdDO1FBQ3hDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGlDQUFpQztRQUNqQyxZQUFPLEdBQXFCLElBQUksZ0JBQVEsRUFBVSxDQUFDO1FBQ25ELDRGQUE0RjtRQUM1RixlQUFVLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsa0NBQWtDO1FBQ2xDLGFBQVEsR0FBcUIsSUFBSSxnQkFBUSxFQUFVLENBQUM7UUFHaEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLG1HQUFtRztRQUN6SSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sS0FBVSxDQUFDO0lBRWpCLG1CQUFtQjtJQUNuQix5S0FBeUs7SUFDekssMkxBQTJMO0lBQzNMLGtMQUFrTDtJQUVsTCxRQUFRO1FBQ0osdUNBQXVDO1FBQ3ZDLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsTUFBTSxDQUFDLEdBQVc7UUFDZCxZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQix1QkFBdUI7UUFDdkIsZ0RBQWdEO1FBQ2hELGdDQUFnQztRQUNoQyxnQkFBZ0I7UUFDaEIsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsSUFBSSxDQUFDLEtBQWEsRUFBRSxNQUF5QjtRQUV6QyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxjQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyx1QkFBeUIsQ0FBQztRQUNyRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ2hDLENBQUM7WUFDRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUM7UUFDWCxDQUFDO1FBRUQsc0xBQXNMO1FBQ3RMLG1FQUFtRTtRQUNuRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUNsQyxDQUFDO1lBQ0csRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsbUJBQW1CO2dCQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLGlNQUFpTSxDQUFDLENBQUM7UUFDck4sS0FBSyxDQUFDLFdBQVcsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBRTlFLCtDQUErQztRQUUvQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztZQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0wsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RFLE1BQU0saUJBQWlCLEdBQVksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN0RSxpSkFBaUo7UUFFakosS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWxCLEtBQUssQ0FBQyxZQUFZLHVCQUE2QixJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxZQUFZLENBQUMsTUFBTSxNQUFNLEdBQTRCLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSx3QkFBZSxFQUFFLENBQUMsQ0FBQztRQUNsRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWxCLE1BQU0sd0JBQXdCLEdBQVcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7UUFDekksS0FBSyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEtBQUssaUNBQXVDLENBQUMsQ0FBQywyQ0FBMkM7UUFDdkssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FDcEMsQ0FBQztZQUNHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9DLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBRUQsa0xBQWtMO1FBQ2xMLDhJQUE4STtRQUM5SSxtTEFBbUw7UUFDbkwsNEZBQTRGO1FBQzVGLDRDQUE0QztRQUM1Qyw2QkFBNkI7UUFDN0IsMEVBQTBFO1FBQzFFLDRMQUE0TDtRQUM1TCwrTEFBK0w7UUFDL0wsMElBQTBJO1FBQzFJLDhMQUE4TDtRQUM5TCxLQUFLLENBQUMsWUFBWSx1QkFBNEIsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7UUFDbEYsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFDbEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQ3hDLENBQUM7WUFDRywrQkFBK0I7WUFDL0IsTUFBTSxJQUFJLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsUUFBUSxDQUFDO1lBQ2IsNElBQTRJO1lBQzVJLElBQUksR0FBRyxHQUFXLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsK0ZBQStGO1lBQzlJLG1FQUFtRTtZQUNuRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFDLEdBQUcsR0FBRyxJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsQ0FBQztZQUU5RCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBQyxHQUFHLEdBQUcsSUFBSSxjQUFNLENBQUMsR0FBRyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0QsS0FBSyxDQUFDLGNBQWMsZUFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDekMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQ2xCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVsQixlQUFlO1FBQ2YsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxvQkFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSx1REFBMkUsNEJBQW9DLEVBQUUsaUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDeE8sQ0FBQztZQUNHLCtDQUErQztZQUMvQyx5RkFBeUY7WUFDekYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkQsbUJBQW1CO1lBQ25CLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQyx3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsNkJBQXVDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEosS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7UUFFakUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsV0FBVyxDQUFDLFlBQW9CO1FBRTVCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBRW5DLGlJQUFpSTtRQUNqSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN6QywrQ0FBK0M7WUFDL0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3RFLENBQUM7Z0JBQ0csb0JBQW9CO2dCQUNwQixzQ0FBc0M7Z0JBQ3RDLEtBQUssQ0FBQztZQUNWLENBQUM7UUFDTCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckMsa0JBQWtCO1FBQ2xCLDRDQUE0QztRQUM1QyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQzNDLENBQUM7WUFDRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQy9DLENBQUM7WUFDRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUNsRCxDQUFDO1lBQ0csTUFBTSxLQUFLLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzdDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQ0osQ0FBQztZQUNFLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLFlBQVksS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFFRCxnS0FBZ0s7SUFDaEssTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQStCO1FBRXZELG1FQUFtRTtRQUNuRSxNQUFNLE9BQU8sR0FBc0IsSUFBSSxDQUFDLFFBQTZCLENBQUM7UUFDdEUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsNERBQTREO0lBQzVELGdCQUFnQixDQUFDLElBQStCO1FBRTVDLG9HQUFvRztRQUNwRyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ3ZCLENBQUM7WUFDRDtnQkFDSSxDQUFDO29CQUNHLDZCQUE2QjtvQkFFN0IsbUNBQW1DO29CQUNuQyxzREFBc0Q7b0JBQ3RELHFDQUFxQztvQkFDckMsaUNBQWlDO29CQUNqQyxJQUFJO29CQUNKLHFDQUFxQztvQkFDckMsNkRBQTZEO29CQUM3RCxpQkFBaUI7b0JBQ2pCLG9CQUFvQjtvQkFDcEIsSUFBSTtvQkFFSixnQ0FBZ0M7b0JBQ2hDLG9DQUFvQztvQkFDcEMsMENBQTBDO29CQUMxQywrRUFBK0U7b0JBQy9FLDZDQUE2QztvQkFFN0MsNkJBQTZCO29CQUM3QixJQUFJO29CQUNKLGtCQUFrQjtvQkFDbEIsa0ZBQWtGO29CQUNsRixJQUFJO29CQUNKLGtDQUFrQztvQkFDbEMsSUFBSTtvQkFDSix5R0FBeUc7b0JBQ3pHLGtGQUFrRjtvQkFDbEYseURBQXlEO29CQUN6RCwrQ0FBK0M7b0JBQy9DLElBQUk7b0JBQ0osT0FBTztvQkFDUCxJQUFJO29CQUNKLGdJQUFnSTtvQkFDaEksb0RBQW9EO29CQUNwRCxlQUFlO29CQUNmLFFBQVE7b0JBQ1IscUJBQXFCO29CQUNyQiw4Q0FBOEM7b0JBQzlDLDhFQUE4RTtvQkFDOUUsMkJBQTJCO29CQUMzQix5REFBeUQ7b0JBQ3pELDJFQUEyRTtvQkFDM0Usa0RBQWtEO29CQUNsRCx1Q0FBdUM7b0JBQ3ZDLHFCQUFxQjtvQkFDckIsdUJBQXVCO29CQUN2QixRQUFRO29CQUVSLHlCQUF5QjtvQkFDekIsUUFBUTtvQkFDUix3RkFBd0Y7b0JBQ3hGLHdGQUF3RjtvQkFDeEYsUUFBUTtvQkFFUixzQkFBc0I7b0JBQ3RCLHFDQUFxQztvQkFDckMsZ0RBQWdEO29CQUNoRCwyQ0FBMkM7b0JBQzNDLElBQUk7b0JBRUosS0FBSyxDQUFDO2dCQUNWLENBQUM7WUFDTDtnQkFDSSxDQUFDO29CQUNHLHFCQUFxQjtvQkFDckIsMkNBQTJDO29CQUMzQywyQ0FBMkM7b0JBQzNDLElBQUk7b0JBQ0osNkJBQTZCO29CQUM3Qix5Q0FBeUM7b0JBQ3pDLCtCQUErQjtvQkFDL0Isd0JBQXdCO29CQUN4QixJQUFJO29CQUNKLGtEQUFrRDtvQkFDbEQsSUFBSTtvQkFDSiw2QkFBNkI7b0JBQzdCLDRDQUE0QztvQkFDNUMsK0JBQStCO29CQUMvQixJQUFJO29CQUVKLDJHQUEyRztvQkFDM0csdUNBQXVDO29CQUN2QyxJQUFJO29CQUNKLDRMQUE0TDtvQkFDNUwsNkJBQTZCO29CQUM3QixJQUFJO2dCQUNSLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FDSjtBQUVELCtCQUErQixNQUF5QjtJQUVwRCxZQUFZLENBQUMsTUFBTSxPQUFPLEdBQThCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDbkcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELFNBQVM7QUFDVCxnQ0FBZ0M7QUFDaEMsMkNBQTJDO0FBQzNDLHlCQUF5QjtBQUN6QjtJQUFBO1FBRUksMkJBQTJCO1FBQzNCLFFBQUcsR0FBb0IsSUFBSSx3QkFBZSxFQUFFLENBQUM7UUFDN0MsOEJBQThCO1FBQzlCLFdBQU0sR0FBb0IsSUFBSSx3QkFBZSxFQUFFLENBQUM7UUFDaEQsbUVBQW1FO1FBQ25FLGdCQUFXLEdBQXFCLElBQUksZ0JBQVEsRUFBVSxDQUFDO1FBQ3ZELHNDQUFzQztRQUN0QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztJQXdEcEMsQ0FBQztJQXRERyw0REFBNEQ7SUFDNUQsS0FBSyxLQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RCxxREFBcUQ7SUFDckQsTUFBTSxDQUFDLEdBQVc7UUFFZCxJQUFJLFFBQVEsR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLGdCQUFnQjtRQUNoQix1QkFBdUI7UUFDdkIsMkJBQTJCO1FBQzNCLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFO1lBQ2hFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFhLEVBQUUsTUFBeUI7UUFFekMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsdUJBQXlCLENBQUM7UUFDckUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEdBQVksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxLQUFLLGlDQUF1QyxDQUFDO1FBQzVGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVqQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQzNCLENBQUM7WUFDRyx1Q0FBdUM7WUFDdkMsZ0NBQWdDO1lBQ2hDLGtEQUFrRDtZQUNsRCxJQUFJO1lBQ0oscUdBQXFHO1lBQ3JHLDZDQUE2QztZQUM3QyxpREFBaUQ7WUFDakQsNERBQTREO1lBQzVELElBQUk7UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUNKLENBQUM7WUFDRyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNwQixLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsaUVBQWlFO0FBQ2pFLDJCQUEyQixNQUF5QjtJQUVoRCxZQUFZLENBQUMsTUFBTSxHQUFHLEdBQTBCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBRXhGLCtDQUErQztJQUMvQyxZQUFZLENBQUMsTUFBTSxTQUFTLEdBQW1CLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RSxNQUFNLElBQUksR0FBVyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUM3RCxDQUFDO1FBQ0csTUFBTSxZQUFZLEdBQWEsQ0FBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUUsQ0FBQztRQUNsRywrSUFBK0k7UUFDL0ksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsb0JBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzSyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsOEJBQThCLE1BQXlCO0lBRW5ELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLHVCQUF5QixDQUFDO0lBQ3RFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxxQkFBMkIsQ0FBQyxDQUNyRSxDQUFDO1FBQ0csRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQ3pCLENBQUM7WUFDRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzVCLENBQUM7Z0JBQ0csRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxPQUFPO1FBQ1AsWUFBWSxDQUFDLE1BQU0sUUFBUSxHQUFtQixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFDNUIsQ0FBQztZQUNHLE1BQU0sS0FBSyxHQUFXLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsUUFBUTtRQUNSLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNmLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztRQUMvRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyw4SEFBOEgsQ0FBQyxDQUFDO1FBQ3RKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7UUFDOUIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztRQUNoQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLHNDQUFzQyxNQUF5QjtJQUUzRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxjQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyx1QkFBeUIsQ0FBQztJQUNyRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FDckQsQ0FBQztRQUNHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNaLE1BQU0sQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjLENBQUMseVFBQXlRLENBQUMsQ0FBQztJQUUxUixLQUFLLENBQUMsWUFBWSx1QkFBNkIsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFFbEI7UUFFSSxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQWMsRUFBRSxHQUFXO1lBRTlDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBc0Isa0dBQWtHO1lBQzFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUUsMEhBQTBIO1lBQzVKLE1BQU0sU0FBUyxHQUFZLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNoQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQ2QsQ0FBQztnQkFDRyxZQUFZLENBQUMsTUFBTSxhQUFhLEdBQTBCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBRSxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7Z0JBQ3RILEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUMxQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7b0JBQ2xELEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDVixDQUFDO3dCQUNHLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUMzQyxDQUFDO29CQUNELElBQUksQ0FDSixDQUFDO3dCQUNHLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO3dCQUNoQyxtRUFBbUU7d0JBQ25FLDJCQUEyQjt3QkFDM0IsTUFBTSxLQUFLLEdBQVcsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNmLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3hCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDbkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4QixNQUFNLEdBQUcsR0FBcUIsQ0FBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFDO3dCQUM5RCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNQLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDMUMsSUFBSTs0QkFDQSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQzFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3JCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDdkIsQ0FBQztvQkFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsQ0FBQztLQUNKO0lBRUQsK0RBQStEO0lBQy9ELEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRTtRQUNsQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUUzQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsZ0NBQWdDLE1BQXlCO0lBRXJELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLHVCQUF5QixDQUFDO0lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUN2RCxDQUFDO1FBQ0csS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1osTUFBTSxDQUFDO0lBQ1gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNLFNBQVMsR0FBbUIsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxZQUFZLENBQUMsTUFBTSxHQUFHLEdBQTRCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSx3QkFBZSxFQUFFLENBQUMsQ0FBQztJQUM1RixZQUFZLENBQUMsTUFBTSxLQUFLLEdBQW1CLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsS0FBSyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ3RELEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLDhIQUE4SCxDQUFDLENBQUM7SUFDL00sS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxDQUFDLEtBQUssV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUFDLENBQUM7SUFDbEUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUNuQyxDQUFDO1FBQ0csR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQ3pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBQyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDdkYsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUN4QixDQUFDO1FBQ0QsS0FBSyxDQUFDO1lBQ0YscURBQXFEO1lBQ3JELGlEQUFpRDtZQUNqRCxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN6QyxLQUFLLENBQUM7UUFDVixLQUFLLENBQUM7WUFDRixDQUFDO2dCQUNHLDRHQUE0RztnQkFDNUcsS0FBSyxDQUFDLFlBQVksdUJBQTRCLElBQUksY0FBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLE9BQU8sR0FBcUIsSUFBSSx5QkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRTtvQkFDakIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUU7d0JBQzFELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ3ZFLHFEQUFxRDtnQkFDckQsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNwQixLQUFLLENBQUM7WUFDVixDQUFDO1FBQ0wsS0FBSyxDQUFDO1lBQ0YsK0NBQStDO1lBQy9DLEtBQUssQ0FBQyxZQUFZLHVCQUE0QixJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUNoQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ25FLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUM7SUFDVixDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDO0FBRUQsbUJBQW1CO0FBQ25CLFFBQVE7QUFFUixxRUFBcUU7QUFDckUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUM5RSwyREFBMkQ7QUFDM0QsMEVBQTBFO0FBRTFFLFNBQVMifQ== \ No newline at end of file diff --git a/imgui_demo.ts b/imgui_demo.ts new file mode 100644 index 0000000..c7fe652 --- /dev/null +++ b/imgui_demo.ts @@ -0,0 +1,3151 @@ +// dear imgui, v1.53 +// (demo code) + +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) + +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. + +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif + +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif + +import * as ImGui from "./imgui"; +import { IMGUI_VERSION } from "./imgui"; +import { IM_ASSERT } from "./imgui"; +import { IM_ARRAYSIZE } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImAccess } from "./imgui"; +import { ImScalar } from "./imgui"; +import { ImTuple2 } from "./imgui"; +import { ImTuple3 } from "./imgui"; +import { ImTuple4 } from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiColorEditFlags } from "./imgui"; +import { ImGuiCond } from "./imgui"; +import { ImGuiFocusedFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImGuiInputTextFlags } from "./imgui" +import { ImGuiMouseCursor } from "./imgui"; +import { ImGuiSelectableFlags } from "./imgui"; +import { ImGuiStyleVar } from "./imgui"; +import { ImGuiTreeNodeFlags } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; +import { ImGuiSizeConstraintCallbackData } from "./imgui"; +import { ImDrawCornerFlags } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVector } from "./imgui"; +import { interface_ImVec2, ImVec2 } from "./imgui"; +import { interface_ImVec4, ImVec4 } from "./imgui"; +import { IM_COL32 } from "./imgui"; +import { ImColor } from "./imgui"; +import { ImGuiIO } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextFilter } from "./imgui"; +import { ImGuiTextBuffer } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImFont } from "./imgui"; +import { ImFontAtlas } from "./imgui"; + +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif + +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE: string = "\n"; + +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A: number, _B: number): number { return ((_A) >= (_B)) ? (_A) : (_B); } + +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- + +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif + +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) + +class Static { + constructor(public value: T) {} +} + +const _static: {[key: string]: Static} = {}; + +function STATIC(key: string, value: T): Static { + return _static[key] || (_static[key] = new Static(value)); +} + +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); + +function ShowHelpMarker(desc: string): void +{ + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} + +export function ShowUserGuide(): void +{ + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} + +// Demonstrate most ImGui features (big function!) +export function ShowDemoWindow(p_open: ImAccess | ImScalar | null = null): void +{ + // Examples apps + /* static */ const show_app_main_menu_bar: Static = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console: Static = STATIC("show_app_console", false); + /* static */ const show_app_log: Static = STATIC("show_app_log", false); + /* static */ const show_app_layout: Static = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor: Static = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text: Static = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize: Static = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize: Static = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay: Static = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles: Static = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering: Static = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor: Static = STATIC("show_app_style_editor", false); + + /* static */ const show_app_metrics: Static = STATIC("show_app_metrics", false); + /* static */ const show_app_about: Static = STATIC("show_app_about", false); + + if (show_app_main_menu_bar.value) ShowExampleAppMainMenuBar(); + if (show_app_console.value) ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + + if (show_app_metrics.value) { ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); } + if (show_app_style_editor.value) { ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ShowStyleEditor(); ImGui.End(); } + if (show_app_about.value) + { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + + /* static */ const no_titlebar: Static = STATIC("no_titlebar", false); + /* static */ const no_scrollbar: Static = STATIC("no_scrollbar", false); + /* static */ const no_menu: Static = STATIC("no_menu", false); + /* static */ const no_move: Static = STATIC("no_move", false); + /* static */ const no_resize: Static = STATIC("no_resize", false); + /* static */ const no_collapse: Static = STATIC("no_collapse", false); + /* static */ const no_close: Static = STATIC("no_close", false); + + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags: ImGui.WindowFlags = 0; + if (no_titlebar.value) window_flags |= ImGuiWindowFlags.NoTitleBar; + if (no_scrollbar.value) window_flags |= ImGuiWindowFlags.NoScrollbar; + if (!no_menu.value) window_flags |= ImGuiWindowFlags.MenuBar; + if (no_move.value) window_flags |= ImGuiWindowFlags.NoMove; + if (no_resize.value) window_flags |= ImGuiWindowFlags.NoResize; + if (no_collapse.value) window_flags |= ImGuiWindowFlags.NoCollapse; + if (no_close.value) p_open = null; // Don't pass our bool* to Begin + + ImGui.SetNextWindowSize(new ImVec2(550,680), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) + { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + + ImGui.Text(`dear imgui says hello. (${IMGUI_VERSION})`); + + // Menu + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("Menu")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) + { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) + { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) + { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ShowUserGuide(); + } + + if (ImGui.CollapsingHeader("Window options")) + { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + + if (ImGui.TreeNode("Style")) + { + /*ImGui.*/ShowStyleEditor(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Capture/Logging")) + { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Widgets")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const clicked: Static = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) + { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + + /* static */ const check: Static = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + + /* static */ const e: Static = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(i/7.0, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(i/7.0, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(i/7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr: Static = STATIC("arr_", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + + ImGui.Separator(); + + ImGui.LabelText("label", "Value"); + + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1: Static = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + + // General BeginCombo() API, you have full control over your selection data and display type + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" ]; + /* static */ const current_item_2: Static = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) // The second parameter is the label previewed before opening the combo. + { + for (let n = 0; n < IM_ARRAYSIZE(items); n++) + { + const is_selected: boolean = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + + { + /* static */ const str0: Static = STATIC("str0", new ImStringBuffer(128, "Hello, world!")); + /* static */ const i0: Static = STATIC("i0", 123); + /* static */ const f0: Static = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + + /* static */ const vec4a: Static> = STATIC>("vec4a", [ 0.10, 0.20, 0.30, 0.44 ]); + ImGui.InputFloat3("input float3", vec4a.value); + } + + { + /* static */ const i1: Static = STATIC("i1#415", 50), i2: Static = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + + /* static */ const f1: Static = STATIC("f1#421", 1.00), f2: Static = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + + { + /* static */ const i1: Static = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); ShowHelpMarker("CTRL+click to input value."); + + /* static */ const f1: Static = STATIC("f1#427", 0.123), f2: Static = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle: Static = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + + /* static */ const col1: Static> = STATIC>("col1", [ 1.0,0.0,0.2 ]); + /* static */ const col2: Static> = STATIC>("col2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + + ImGui.ColorEdit4("color 2", col2.value); + + const listbox_items: string[] = [ "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" ]; + /* static */ const listbox_item_current: Static = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + + /* static */ const listbox_item_current2: Static = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Trees")) + { + if (ImGui.TreeNode("Basic trees")) + { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) + { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Advanced, with Selectable nodes")) + { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position: Static = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + + /* static */ const selection_mask: Static = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked: number = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(ImGuiStyleVar.IndentSpacing, ImGui.GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) + { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.OpenOnDoubleClick | ((selection_mask.value & (1 << i)) ? ImGuiTreeNodeFlags.Selected : 0); + if (i < 3) + { + // Node + const node_open: boolean = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.NoTreePushOnOpen; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) + { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Collapsing Headers")) + { + /* static */ const closable_group: Static = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Bullets")) + { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text")) + { + if (ImGui.TreeNode("Colored Text")) + { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new ImVec4(1.0,0.0,1.0,1.0), "Pink"); + ImGui.TextColored(new ImVec4(1.0,1.0,0.0,1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Word Wrapping")) + { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + + /* static */ const wrap_width: Static = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + + ImGui.Text("Test paragraph 1:"); + let pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("UTF-8 Text")) + { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf: Static = STATIC("buf", new ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Images")) + { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io: ImGuiIO = ImGui.GetIO(); + + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id: WebGLTexture | null = io.Fonts.TexID; + const my_tex_w: number = io.Fonts.TexWidth; + const my_tex_h: number = io.Fonts.TexHeight; + + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new ImVec2(my_tex_w, my_tex_h), new ImVec2(0,0), new ImVec2(1,1), new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + const focus_sz: number = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; if (focus_x < 0.0) focus_x = 0.0; else if (focus_x > my_tex_w - focus_sz) focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; if (focus_y < 0.0) focus_y = 0.0; else if (focus_y > my_tex_h - focus_sz) focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0: ImVec2 = new ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1: ImVec2 = new ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new ImVec2(128,128), uv0, uv1, new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count: Static = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); + let frame_padding: number = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new ImVec2(32,32), new ImVec2(0,0), new ImVec2(32.0/my_tex_w,32/my_tex_h), frame_padding, new ImVec4(0,0,0,1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Selectables")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const selected: Static = STATIC("selected#672", [ false, true, false, false ]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], ImGuiSelectableFlags.AllowDoubleClick)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) + { + /* static */ const selected: Static = STATIC("selected#687", [ false, false, false ]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); ImGui.SameLine(300); ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) + { + ImGui.Columns(3, null, false); + /* static */ const selected: Static = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) + { + const label: string = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) + { + /* static */ const selected: Static = STATIC("selected#712", [ true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true ]); + for (let i = 0; i < 16; i++) + { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new ImVec2(50,50))) + { + let x: number = i % 4, y: number = i / 4; + if (x > 0) selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Filtered Text Input")) + { + /* static */ const buf1: Static = STATIC("buf1", new ImStringBuffer(64, "")); ImGui.InputText("default", buf1.value, IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2: Static = STATIC("buf2", new ImStringBuffer(64, "")); ImGui.InputText("decimal", buf2.value, IM_ARRAYSIZE(buf2.value), ImGuiInputTextFlags.CharsDecimal); + /* static */ const buf3: Static = STATIC("buf3", new ImStringBuffer(64, "")); ImGui.InputText("hexadecimal", buf3.value, IM_ARRAYSIZE(buf3.value), ImGuiInputTextFlags.CharsHexadecimal | ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf4: Static = STATIC("buf4", new ImStringBuffer(64, "")); ImGui.InputText("uppercase", buf4.value, IM_ARRAYSIZE(buf4.value), ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf5: Static = STATIC("buf5", new ImStringBuffer(64, "")); ImGui.InputText("no blank", buf5.value, IM_ARRAYSIZE(buf5.value), ImGuiInputTextFlags.CharsNoBlank); + class TextFilters { public static FilterImGuiLetters(data: ImGuiTextEditCallbackData): number { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) return 0; return 1; } } + /* static */ const buf6: Static = STATIC("buf6", new ImStringBuffer(64, "")); ImGui.InputText("\"imgui\" letters", buf6.value, IM_ARRAYSIZE(buf6.value), ImGuiInputTextFlags.CallbackCharFilter, TextFilters.FilterImGuiLetters); + + ImGui.Text("Password input"); + /* static */ const bufpass: Static = STATIC("bufpass", new ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.Password | ImGuiInputTextFlags.CharsNoBlank); + ImGui.SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.CharsNoBlank); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-line Text Input")) + { + /* static */ const read_only: Static = STATIC("read_only", false); + /* static */ const text: Static = STATIC("text", new ImStringBuffer(1024*16, + "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, IM_ARRAYSIZE(text.value), new ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), ImGuiInputTextFlags.AllowTabInput | (read_only.value ? ImGuiInputTextFlags.ReadOnly : 0)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Plots widgets")) + { + /* static */ const animate: Static = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + + /* static */ const arr: Static = STATIC("arr", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + ImGui.PlotLines_Array("Frame Times", arr.value, IM_ARRAYSIZE(arr.value)); + + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values: Static = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset: Static = STATIC("values_offset", 0); + /* static */ const refresh_time: Static = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) // Create dummy data at fixed 60 hz rate for the demo + { + /* static */ const phase: Static = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value+1) % IM_ARRAYSIZE(values.value); + phase.value += 0.10*values_offset.value; + refresh_time.value += 1.0/60.0; + } + ImGui.PlotLines_Array("Lines", values.value, IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new ImVec2(0,80)); + + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs + { + public static Sin(data: any, i: number): number { return Math.sin(i * 0.1); } + public static Saw(data: any, i: number): number { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type: Static = STATIC("func_type", 0), display_count: Static = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func: (data: any, i: number) => number = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.Separator(); + + // Animate a simple progress bar + /* static */ const progress: Static = STATIC("progress", 0.0), progress_dir: Static = STATIC("progress_dir", 1.0); + if (animate.value) + { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { progress.value = +1.1; progress_dir.value *= -1.0; } + if (progress.value <= -0.1) { progress.value = -0.1; progress_dir.value *= -1.0; } + } + + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new ImVec2(0.0,0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + + const progress_saturated: number = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf: string = `${(progress_saturated*1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new ImVec2(0.,0.), buf); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Color/Picker Widgets")) + { + /* static */ const color: Static = STATIC("color#863", new ImColor(114, 144, 154, 200).toImVec4()); + + /* static */ const hdr: Static = STATIC("hdr", false); + /* static */ const alpha_preview: Static = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview: Static = STATIC("alpha_half_preview", false); + /* static */ const options_menu: Static = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); ImGui.SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); ImGui.SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags: ImGuiColorEditFlags = (hdr.value ? ImGuiColorEditFlags.HDR : 0) | (alpha_half_preview.value ? ImGuiColorEditFlags.AlphaPreviewHalf : (alpha_preview.value ? ImGuiColorEditFlags.AlphaPreview : 0)) | (options_menu.value ? 0 : ImGuiColorEditFlags.NoOptions); + + ImGui.Text("Color widget:"); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, ImGuiColorEditFlags.HSV | misc_flags); + + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, ImGuiColorEditFlags.Float | misc_flags); + + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoLabel | misc_flags); + + ImGui.Text("Color button with Custom Picker Popup:"); + + // Generate a dummy palette + /* static */ const saved_palette_inited: Static = STATIC("saved_palette_inited", false); + /* static */ const saved_palette: Static = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) + { + saved_palette.value[n] = new ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r: ImScalar = [ 0.0 ]; + const g: ImScalar = [ 0.0 ]; + const b: ImScalar = [ 0.0 ]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + + /* static */ const backup_color: Static = STATIC("backup_color", new ImVec4()); + let open_popup: boolean = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) + { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) + { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < IM_ARRAYSIZE(saved_palette.value); n++) + { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], ImGuiColorEditFlags.NoAlpha | ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.NoTooltip, new ImVec2(20,20))) + color.value.Copy(new ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + + if (ImGui.BeginDragDropTarget()) + { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new ImVec2(80,80)); + + ImGui.Text("Color picker:"); + /* static */ const alpha: Static = STATIC("alpha", true); + /* static */ const alpha_bar: Static = STATIC("alpha_bar", true); + /* static */ const side_preview: Static = STATIC("side_preview", true); + /* static */ const ref_color: Static = STATIC("ref_color", false); + /* static */ const ref_color_v: Static = STATIC("ref_color_v", new ImVec4(1.0,0.0,1.0,0.5)); + /* static */ const inputs_mode: Static = STATIC("inputs_mode", 2); + /* static */ const picker_mode: Static = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) + { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) + { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, ImGuiColorEditFlags.NoInputs | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); ShowHelpMarker("User can right-click the picker to change mode."); + let flags: ImGuiColorEditFlags = misc_flags; + if (!alpha.value) flags |= ImGuiColorEditFlags.NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) flags |= ImGuiColorEditFlags.AlphaBar; + if (!side_preview.value) flags |= ImGuiColorEditFlags.NoSidePreview; + if (picker_mode.value === 1) flags |= ImGuiColorEditFlags.PickerHueBar; + if (picker_mode.value === 2) flags |= ImGuiColorEditFlags.PickerHueWheel; + if (inputs_mode.value === 1) flags |= ImGuiColorEditFlags.NoInputs; + if (inputs_mode.value === 2) flags |= ImGuiColorEditFlags.RGB; + if (inputs_mode.value === 3) flags |= ImGuiColorEditFlags.HSV; + if (inputs_mode.value === 4) flags |= ImGuiColorEditFlags.HEX; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Uint8 | ImGuiColorEditFlags.HSV); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Float | ImGuiColorEditFlags.RGB); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Range Widgets")) + { + /* static */ const begin: Static = STATIC("begin", 10), end: Static = STATIC("end", 90); + /* static */ const begin_i: Static = STATIC("begin_i", 100), end_i: Static = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-component Widgets")) + { + /* static */ const vec4f: Static> = STATIC>("vec4f", [ 0.10, 0.20, 0.30, 0.44 ]); + /* static */ const vec4i: Static> = STATIC>("vec4i", [ 1, 5, 100, 255 ]); + + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Vertical Sliders")) + { + const spacing: number = 4; + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(spacing, spacing)); + + /* static */ const int_value: Static = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new ImVec2(18,160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + + /* static */ const values: Static = STATIC("values#1072", [ 0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0 ]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.FrameBg, ImColor.HSV(i/7.0, 0.5, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, ImColor.HSV(i/7.0, 0.6, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgActive, ImColor.HSV(i/7.0, 0.7, 0.5)); + ImGui.PushStyleColor(ImGuiCol.SliderGrab, ImColor.HSV(i/7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new ImVec2(18,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2: Static = STATIC("values2", [ 0.20, 0.80, 0.40, 0.25 ]); + const rows: number = 3; + const small_slider_size: Readonly = new ImVec2(18, (160.0-(rows-1)*spacing)/rows); + for (let nx = 0; nx < 4; nx++) + { + if (nx > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) + { + ImGui.PushID(nx*rows+ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(ImGuiStyleVar.GrabMinSize, 40); + ImGui.VSliderFloat("##v", new ImVec2(40,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Layout")) + { + if (ImGui.TreeNode("Child regions")) + { + /* static */ const disable_mouse_wheel: Static = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + + ImGui.Text("Without border"); + /* static */ const line: Static = STATIC("line", 50); + let goto_line: boolean = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, ImGuiInputTextFlags.EnterReturnsTrue) || goto_line; + ImGui.PopItemWidth(); + + ImGui.BeginChild("Sub1", new ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5,300), false, ImGuiWindowFlags.HorizontalScrollbar | (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + for (let i = 0; i < 100; i++) + { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + + ImGui.SameLine(); + + ImGui.PushStyleVar(ImGuiStyleVar.ChildRounding, 5.0); + ImGui.BeginChild("Sub2", new ImVec2(0,300), true, (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) + { + if (i === 50) + ImGui.NextColumn(); + const buf: string = `${("00000000" + (i*5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Widgets Width")) + { + /* static */ const f: Static = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Basic Horizontal Layout")) + { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + + // Text + ImGui.Text("Two items: Hello"); ImGui.SameLine(); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Adjust spacing + ImGui.Text("More spacing: Hello"); ImGui.SameLine(0, 20); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); ImGui.SameLine(); + ImGui.Button("Banana"); ImGui.SameLine(); + ImGui.Button("Apple"); ImGui.SameLine(); + ImGui.Button("Corniflower"); + + // Button + ImGui.Text("Small buttons"); ImGui.SameLine(); + ImGui.SmallButton("Like this one"); ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.Text("x=150"); + ImGui.SameLine(300); ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.SmallButton("x=150"); + ImGui.SameLine(300); ImGui.SmallButton("x=300"); + + // Checkbox + /* static */ const c1: Static=STATIC("c1", false),c2: Static=STATIC("c2", false),c3: Static=STATIC("c3", false),c4: Static=STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + + // Various + /* static */ const f0: Static=STATIC("f0#1255", 1.0), f1: Static=STATIC("f1#1255", 2.0), f2: Static=STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD" ]; + /* static */ const item: Static = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, IM_ARRAYSIZE(items)); ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0,5.0); + ImGui.PopItemWidth(); + + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection: Static = STATIC("selection", [ 0, 1, 2, 3 ]); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + + // Dummy + const sz: Readonly = new ImVec2(30,30); + ImGui.Button("A", sz); ImGui.SameLine(); + ImGui.Dummy(sz); ImGui.SameLine(); + ImGui.Button("B", sz); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Groups")) + { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size: ImVec2 = ImGui.GetItemRectSize(); + const values: number[/*5*/] = [ 0.5, 0.20, 0.80, 0.60, 0.25 ]; + ImGui.PlotHistogram_Array("##values", values, IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + + ImGui.Button("ACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text Baseline Alignment")) + { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + + ImGui.Text("One\nTwo\nThree"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + + ImGui.Button("HOP##1"); ImGui.SameLine(); + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("HOP##2"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("TEST##1"); ImGui.SameLine(); + ImGui.Text("TEST"); ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); ImGui.SameLine(); + ImGui.Button("Widget##1"); ImGui.SameLine(); + ImGui.Text("Widget"); ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); ImGui.SameLine(); + ImGui.Button("Widget##3"); + + // Tree + const spacing: number = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open: boolean = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##2"); + if (node_open) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##4"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Scrolling")) + { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track: Static = STATIC("track", true); + /* static */ const track_line: Static = STATIC("track_line", 50), scroll_to_px: Static = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to: boolean = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) track.value = false; + + for (let i = 0; i < 5; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) + { + if (track.value && line === track_line.value) + { + ImGui.TextColored(new ImColor(255,255,0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else + { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y: number = ImGui.GetScrollY(), scroll_max_y: number = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.Bullet(); ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines: Static = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 3.0); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new ImVec2(0, ImGui.GetFrameHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags.HorizontalScrollbar); + for (let line = 0; line < lines.value; line++) + { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons: number = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) + { + if (n > 0) ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf: string = n.toFixed(0); + const label: string = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; + const hue: number = n*0.05; + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x: number = ImGui.GetScrollX(), scroll_max_x: number = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta: number = 0.0; + ImGui.SmallButton("<<"); if (ImGui.IsItemActive()) scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text("Scroll from code"); ImGui.SameLine(); + ImGui.SmallButton(">>"); if (ImGui.IsItemActive()) scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) + { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Clipping")) + { + /* static */ const size: Static = STATIC("size", new ImVec2(100, 100)), offset: Static = STATIC("offset", new ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos: Readonly = ImGui.GetCursorScreenPos(); + const clip_rect: Readonly = new ImVec4(pos.x, pos.y, pos.x+size.value.x, pos.y+size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { offset.value.x += ImGui.GetIO().MouseDelta.x; offset.value.y += ImGui.GetIO().MouseDelta.y; } + ImGui.GetWindowDrawList().AddRectFilled(pos, new ImVec2(pos.x+size.value.x,pos.y+size.value.y), IM_COL32(90,90,120,255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize()*2.0, new ImVec2(pos.x+offset.value.x,pos.y+offset.value.y), IM_COL32(255,255,255,255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Popups & Modal windows")) + { + if (ImGui.TreeNode("Popups")) + { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + + /* static */ const selected_fish: Static = STATIC("selected_fish", -1); + const names: string[] = [ "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" ]; + /* static */ const toggles: Static = STATIC("toggles", [ true, false, false, false, false ]); + + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) + { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) + { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Context menus")) + { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value: Static = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) + { + if (ImGui.Selectable("Set to zero")) value.value = 0.0; + if (ImGui.Selectable("Set to PI")) value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + + /* static */ const name: Static = STATIC("name", new ImStringBuffer(32, "Label1")); + const buf: string = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). + { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); ImGui.Text("(<-- right-click here)"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Modals")) + { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, ImGuiWindowFlags.AlwaysAutoResize)) + { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + + /* static */ const dont_ask_me_next_time: Static = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + + if (ImGui.Button("OK", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.EndPopup(); + } + + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) + { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item: Static = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color: Static> = STATIC>("color#2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) + { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Menus inside a regular window")) + { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Columns")) + { + ImGui.PushID("Columns"); + + // Basic columns + if (ImGui.TreeNode("Basic")) + { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) + { + const label: string = `Item ${n}`; + if (ImGui.Selectable(label)) {} + if (ImGui.Button(label, new ImVec2(-1,0))) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Text("Hovered"); ImGui.NextColumn(); + ImGui.Separator(); + const names: string[/*3*/] = [ "One", "Two", "Three" ]; + const paths: string[/*3*/] = [ "/path/one", "/path/two", "/path/three" ]; + /* static */ const selected: Static = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) + { + const label: string = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, ImGuiSelectableFlags.SpanAllColumns)) + selected.value = i; + const hovered: boolean = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); ImGui.NextColumn(); + ImGui.Text(paths[i]); ImGui.NextColumn(); + ImGui.Text(`${hovered}`); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) + { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo: Static = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar: Static = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + + if (ImGui.CollapsingHeader("Category A")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) + { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Borders")) + { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders: Static = STATIC("h_borders", true); + /* static */ const v_borders: Static = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4*3; i++) + { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c: string = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.SetNextWindowContentSize(new ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new ImVec2(0, ImGui.GetFontSize() * 20), false, ImGuiWindowFlags.HorizontalScrollbar); + ImGui.Columns(10); + const ITEMS_COUNT: number = 2000; + const clipper: ImGuiListClipper = new ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) + { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) + { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + + const node_open: boolean = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) + { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { ImGui.BulletText("Sailor"); ImGui.TreePop(); } ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { ImGui.BulletText("Marin"); ImGui.TreePop(); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + + if (ImGui.CollapsingHeader("Filtering")) + { + /* static */ const filter: Static = STATIC("filter#1864", new ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines: string[] = [ "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" ]; + for (let i = 0; i < IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + + if (ImGui.CollapsingHeader("Inputs & Focus")) + { + const io: ImGuiIO = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + + if (ImGui.TreeNode("Keyboard & Mouse State")) + { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Mouse clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse dbl-clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseDoubleClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse released:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseReleased(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + + ImGui.Text("Keys down:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Keys pressed:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyPressed(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text("Keys release:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyReleased(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Tabbing")) + { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf: Static = STATIC("buf1#1921", new ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focus from code")) + { + const focus_1: boolean = ImGui.Button("Focus on 1"); ImGui.SameLine(); + const focus_2: boolean = ImGui.Button("Focus on 2"); ImGui.SameLine(); + const focus_3: boolean = ImGui.Button("Focus on 3"); + let has_focus: number = 0; + /* static */ const buf: Static = STATIC("buf2#1944", new ImStringBuffer(128, "click on a button to set focus")); + + if (focus_1) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 1; + + if (focus_2) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 2; + + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focused & Hovered Test")) + { + /* static */ const embed_all_inside_a_child_window: Static = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new ImVec2(0, ImGui.GetFontSize() * 25), true); + + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows | ImGuiFocusedFlags.RootWindow)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.RootWindow)}\n`); + + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows | ImGuiHoveredFlags.RootWindow)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow)}\n"`); + + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText( + `IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenOverlapped)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.RectOnly)}\n`); + + ImGui.BeginChild("child", new ImVec2(0,50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Dragging")) + { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) + { + // Draw a line between the button and the mouse cursor + const draw_list: ImGui.ImDrawList = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[ImGuiCol.Button]), 4.0); + draw_list.PopClipRect(); + + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw: Readonly = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold: Readonly = ImGui.GetMouseDragDelta(0); + const mouse_delta: Readonly = io.MouseDelta; + ImGui.SameLine(); ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Mouse cursors")) + { + const mouse_cursors_names: string[] = [ "Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE" ]; + IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) === ImGuiMouseCursor.COUNT); + + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < ImGuiMouseCursor.COUNT; i++) + { + const label: string = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + + ImGui.End(); +} + +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +export function ShowStyleSelector(label: string): boolean +{ + /* static */ const style_idx: Static = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) + { + switch (style_idx.value) + { + case 0: ImGui.StyleColorsClassic(); break; + case 1: ImGui.StyleColorsDark(); break; + case 2: ImGui.StyleColorsLight(); break; + } + return true; + } + return false; +} + +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +export function ShowFontSelector(label: string): void +{ + const io: ImGuiIO = ImGui.GetIO(); + const font_current: ImFont = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) + { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker( + "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} + +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void +{ + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style: ImGuiStyle = ImGui.GetStyle(); + /* static */ const ref_saved_style: Static = STATIC("ref_saved_style", new ImGuiStyle()); + + // Default to using internal storage as reference + /* static */ const init: Static = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + + if (/*ImGui.*/ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ShowFontSelector("Fonts##Selector"); + + + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { let window_border: boolean = (style.WindowBorderSize > 0.0); if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) style.WindowBorderSize = window_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let frame_border: boolean = (style.FrameBorderSize > 0.0); if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) style.FrameBorderSize = frame_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let popup_border: boolean = (style.PopupBorderSize > 0.0); if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) style.PopupBorderSize = popup_border ? 1.0 : 0.0; } + + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + + if (ImGui.TreeNode("Rendering")) + { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); ImGui.SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Settings")) + { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); ImGui.SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Colors")) + { + /* static */ const output_dest: Static = STATIC("output_dest", 0); + /* static */ const output_only_modified: Static = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) + { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const col: Readonly = style.Colors[i]; + const name: string = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); ImGui.PushItemWidth(120); ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + + /* static */ const filter: Static = STATIC("filter#2223", new ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + + /* static */ const alpha_flags: Static = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreview); ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreviewHalf); + + ImGui.BeginChild("#colors", new ImVec2(0, 300), true, ImGuiWindowFlags.AlwaysVerticalScrollbar | ImGuiWindowFlags.AlwaysHorizontalScrollbar); + ImGui.PushItemWidth(-160); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], ImGuiColorEditFlags.AlphaBar | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) + { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Save")) ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Revert")) style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + + ImGui.TreePop(); + } + + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened: boolean = ImGui.TreeNode("Fonts"); + if (fonts_opened) + { + const atlas: ImFontAtlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) + { + ImGui.Image(atlas.TexID, new ImVec2(atlas.TexWidth, atlas.TexHeight), new ImVec2(0,0), new ImVec2(1,1), new ImColor(255,255,255,255).Value, new ImColor(255,255,255,128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale: Static = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + + ImGui.PopItemWidth(); +} + +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar(): void +{ + if (ImGui.BeginMainMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) + { + if (ImGui.MenuItem("Undo", "CTRL+Z")) {} + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) {} + if (ImGui.MenuItem("Copy", "CTRL+C")) {} + if (ImGui.MenuItem("Paste", "CTRL+V")) {} + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} + +function ShowExampleMenuFile(): void +{ + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) {} + if (ImGui.MenuItem("Open", "Ctrl+O")) {} + if (ImGui.BeginMenu("Open Recent")) + { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) + { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) {} + if (ImGui.MenuItem("Save As..")) {} + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) + { + /* static */ const enabled: Static = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f: Static = STATIC("f#2408", 0.5); + /* static */ const n: Static = STATIC("n", 0); + /* static */ const b: Static = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) + { + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i as ImGuiCol); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i as ImGuiCol)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) // Disabled + { + IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) {} + if (ImGui.MenuItem("Quit", "Alt+F4")) {} +} + +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open: ImAccess): void +{ + if (!ImGui.Begin("Example: Auto-resizing window", p_open, ImGui.WindowFlags.AlwaysAutoResize)) + { + ImGui.End(); + return; + } + + /* static */ const lines: Static = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} + +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open: ImAccess): void +{ + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + public static Square(data: ImGuiSizeConstraintCallbackData): void { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + public static Step(data: ImGuiSizeConstraintCallbackData): void { + const step: number = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + + /* static */ const auto_resize: Static = STATIC("auto_resize", false); + /* static */ const type: Static = STATIC("type", 0); + /* static */ const display_lines: Static = STATIC("display_lines", 10); + if (type.value === 0) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 0), new ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, -1), new ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) ImGui.SetNextWindowSizeConstraints(new ImVec2(100, 100), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) ImGui.SetNextWindowSizeConstraints(new ImVec2(400, -1), new ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 400), new ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100);// Fixed Step + + const flags: ImGuiWindowFlags = auto_resize.value ? ImGuiWindowFlags.AlwaysAutoResize : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) + { + const desc: string[] = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { ImGui.SetWindowSize(new ImVec2(200, 200)); } ImGui.SameLine(); + if (ImGui.Button("500x500")) { ImGui.SetWindowSize(new ImVec2(500, 500)); } ImGui.SameLine(); + if (ImGui.Button("800x200")) { ImGui.SetWindowSize(new ImVec2(800, 200)); } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} + +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open: ImAccess): void +{ + const DISTANCE: number = 10.0; + /* static */ const corner: Static = STATIC("corner", 0); + const window_pos: Readonly = new ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot: Readonly = new ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, ImGuiCond.Always, window_pos_pivot); + ImGui.PushStyleColor(ImGuiCol.WindowBg, new ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags.NoTitleBar|ImGuiWindowFlags.NoResize|ImGuiWindowFlags.AlwaysAutoResize|ImGuiWindowFlags.NoMove|ImGuiWindowFlags.NoSavedSettings)) + { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} + +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open: ImAccess): void +{ + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new ImVec2(100,100), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + + ImGui.SetNextWindowPos(new ImVec2(100,200), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf: string = `Animated title ${"|/-\\".charAt((ImGui.GetTime()/0.25)&3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new ImVec2(100,300), ImGuiCond.FirstUseEver); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} + +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(350,560), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Custom rendering", p_open)) + { + ImGui.End(); + return; + } + + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz: Static = STATIC("sz", 36.0); + /* static */ const col: Static = STATIC("color#2583", new ImVec4(1.0,1.0,0.4,1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value) + { + const p: Readonly = ImGui.GetCursorScreenPos(); + const col32: ImU32 = IM_COL32(col.value.x*255, col.value.y*255, col.value.z*255, col.value.w*255); + let x: number = p.x + 4.0, y: number = p.y + 4.0, spacing: number = 8.0; + for (let n = 0; n < 2; n++) + { + const thickness: number = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 20, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 0.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight, thickness); x += sz.value+spacing; + draw_list.AddTriangle(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y ), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x, y+sz.value), col32, thickness); x += spacing; + draw_list.AddBezierCurve(new ImVec2(x, y), new ImVec2(x+sz.value*1.3,y+sz.value*0.3), new ImVec2(x+sz.value-sz.value*1.3,y+sz.value-sz.value*0.3), new ImVec2(x+sz.value, y+sz.value), col32, thickness); + x = p.x + 4; + y += sz.value+spacing; + } + draw_list.AddCircleFilled(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight); x += sz.value+spacing; + draw_list.AddTriangleFilled(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32); x += sz.value+spacing; + draw_list.AddRectFilledMultiColor(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), IM_COL32(0,0,0), IM_COL32(255,0,0), IM_COL32(255,255,0), IM_COL32(0,255,0)); + ImGui.Dummy(new ImVec2((sz.value+spacing)*8, (sz.value+spacing)*3)); + } + ImGui.Separator(); + { + /* static */ const points: Static> = STATIC("points", new ImVector()); + /* static */ const adding_line: Static = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) points.value.clear(); + if (points.value.Size >= 2) { ImGui.SameLine(); if (ImGui.Button("Undo")) { points.value.pop_back(); points.value.pop_back(); } } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos: ImVec2 = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size: ImVec2 = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) canvas_size.x = 50.0; + if (canvas_size.y < 50.0) canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50,50,50), IM_COL32(50,50,60), IM_COL32(60,60,70), IM_COL32(50,50,60)); + draw_list.AddRect(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255,255,255)); + + let adding_preview: boolean = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas: ImVec2 = new ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) + { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) + { + if (!adding_line.value && ImGui.IsMouseClicked(0)) + { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) + { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new ImVec2(canvas_pos.x + points.value.Data[i+1].x, canvas_pos.y + points.value.Data[i+1].y), IM_COL32(255,255,0,255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} + +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256, ""); + // ImVector Items; + Items: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + // ImVector History; + History: ImVector = new ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + HistoryPos: number = -1; + // ImVector Commands; + Commands: ImVector = new ImVector(); + + constructor() { + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + + delete(): void {} + + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + + ClearLog(): void { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + + // void Draw(const char* title, bool* p_open) + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin(title, p_open)) + { + ImGui.End(); + return; + } + + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) + { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + + // TODO: display items starting from the bottom + + if (ImGui.SmallButton("Add Dummy Text")) { this.AddLog(`${this.Items.Size} some text`); this.AddLog("some more text"); this.AddLog("display very important message here!"); } ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { this.AddLog("[error] something went wrong"); } ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { this.ClearLog(); } ImGui.SameLine(); + const copy_to_clipboard: boolean = ImGui.SmallButton("Copy"); ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + + ImGui.Separator(); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + /* static */ const filter: Static = STATIC("filter#2763", new ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + + const footer_height_to_reserve: number = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags.HorizontalScrollbar); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.Selectable("Clear")) this.ClearLog(); + ImGui.EndPopup(); + } + + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(4,1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) + { + // const char* item = Items[i]; + const item: string = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col: ImVec4 = new ImVec4(1.0,1.0,1.0,1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) col = new ImVec4(1.0,0.4,0.4,1.0); + // else if (strncmp(item, "# ", 2) === 0) col = ImColor(1.0f,0.78f,0.58f,1.0f); + else if (/^# /.test(item)) col = new ImVec4(1.0,0.78,0.58,1.0); + ImGui.PushStyleColor(ImGuiCol.Text, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + + // Command-line + if (ImGui.InputText("Input", this.InputBuf, IM_ARRAYSIZE(this.InputBuf), ImGuiInputTextFlags.EnterReturnsTrue|ImGuiInputTextFlags.CallbackCompletion|ImGuiInputTextFlags.CallbackHistory, ExampleAppConsole.TextEditCallbackStub, this)) + { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(ImGuiFocusedFlags.RootAndChildWindows) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + + ImGui.End(); + } + + // void ExecCommand(const char* command_line) + ExecCommand(command_line: string): void + { + this.AddLog(`# ${command_line}\n`); + + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size-1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) + { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") + { + this.ClearLog(); + } + // else if (Stricmp(command_line, "HELP") === 0) + else if (command_line.toUpperCase() === "HELP") + { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + // else if (Stricmp(command_line, "HISTORY") === 0) + else if (command_line.toUpperCase() === "HISTORY") + { + const first: number = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else + { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data: ImGuiTextEditCallbackData): number + { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console: ExampleAppConsole = data.UserData as ExampleAppConsole; + return console.TextEditCallback(data); + } + + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data: ImGuiTextEditCallbackData): number + { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) + { + case ImGuiInputTextFlags.CallbackCompletion: + { + // Example of TEXT COMPLETION + + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + + break; + } + case ImGuiInputTextFlags.CallbackHistory: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} + +function ShowExampleAppConsole(p_open: ImAccess): void +{ + /* static */ const console: Static = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} + +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog +{ + // ImGuiTextBuffer Buf; + Buf: ImGuiTextBuffer = new ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + Filter: ImGuiTextFilter = new ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + LineOffsets: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear(): void { this.Buf.clear(); this.LineOffsets.clear(); } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void + { + let old_size: number = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(500,400), ImGuiCond.FirstUseEver); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) this.Clear(); + ImGui.SameLine(); + const copy: boolean = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new ImVec2(0,0), false, ImGuiWindowFlags.HorizontalScrollbar); + if (copy) ImGui.LogToClipboard(); + + if (this.Filter.IsActive()) + { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else + { + ImGui.TextUnformatted(this.Buf.begin()); + } + + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} + +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open: ImAccess): void +{ + /* static */ const log: Static = STATIC("log#3073", new ExampleAppLog()); + + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time: Static = STATIC("last_time", -1.0); + const time: number = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) + { + const random_words: string[] = [ "system", "info", "warning", "error", "fatal", "notice", "log" ]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + + log.value.Draw("Example: Log", p_open); +} + +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(500, 440), ImGuiCond.FirstUseEver); + if (ImGui.Begin("Example: Layout", p_open, ImGuiWindowFlags.MenuBar)) + { + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + if (ImGui.MenuItem("Close")) p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + // left + /* static */ const selected: Static = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) + { + const label: string = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) {} + ImGui.SameLine(); + if (ImGui.Button("Save")) {} + ImGui.EndGroup(); + } + ImGui.End(); +} + +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(430,450), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Property editor", p_open)) + { + ImGui.End(); + return; + } + + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2,2)); + ImGui.Columns(2); + ImGui.Separator(); + + class funcs + { + static ShowDummyObject(prefix: string, uid: number): void + { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open: boolean = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) + { + /* static */ const dummy_members: Static = STATIC("dummy_members", [ 0.0,0.0,1.0,3.1416,100.0,999.0 ]); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) + { + funcs.ShowDummyObject("Child", 424242); + } + else + { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label: string = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref: ImScalar = [ dummy_members.value[i] || 0 ]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} + +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Long text display", p_open)) + { + ImGui.End(); + return; + } + + /* static */ const test_type: Static = STATIC("test_type", 0); + /* static */ const log: Static = STATIC("log#3217", new ImGuiTextBuffer()); + /* static */ const lines: Static = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { log.value.clear(); lines.value = 0; } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) + { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value+i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) + { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + const clipper: ImGuiListClipper = new ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} + +// End of Demo code +// #else + +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} + +// #endif diff --git a/imgui_memory_editor.js b/imgui_memory_editor.js new file mode 100644 index 0000000..e9f27e2 --- /dev/null +++ b/imgui_memory_editor.js @@ -0,0 +1,448 @@ +"use strict"; +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +// #include // sprintf, scanf +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +class MemoryEditor { + constructor() { + // typedef unsigned char u8; + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + this.Open = false; + // bool ReadOnly; // = false // set to true to disable any editing + this.ReadOnly = false; + // int Rows; // = 16 // + this.Rows = 16; + // bool OptShowAscii; // = true // + this.OptShowAscii = true; + // bool OptShowHexII; // = false // + this.OptShowHexII = false; + // bool OptGreyOutZeroes; // = true // + this.OptGreyOutZeroes = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + this.OptMidRowsCount = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + this.OptAddrDigitsCount = 0; + // ImU32 HighlightColor; // // color of highlight + this.HighlightColor = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + this.ReadFn = null; + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + this.WriteFn = null; + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + this.HighlightFn = null; + // State/Internals + // bool ContentsWidthChanged; + this.ContentsWidthChanged = false; + // size_t DataEditingAddr; + this.DataEditingAddr = -1; + // bool DataEditingTakeFocus; + this.DataEditingTakeFocus = false; + // char DataInputBuf[32]; + this.DataInputBuf = new imgui_1.ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + this.AddrInputBuf = new imgui_1.ImStringBuffer(32, ""); + // size_t GotoAddr; + this.GotoAddr = -1; + // size_t HighlightMin, HighlightMax; + this.HighlightMin = -1; + this.HighlightMax = -1; + } + GotoAddrAndHighlight(addr_min, addr_max) { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + CalcSizes(s, mem_size, base_display_addr) { + const style = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n, pad = 0) { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + static sscanf_PRISizeT(s) { + return parseInt(s, 16); + } + // Standalone Memory Editor window + DrawWindow(title, mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new imgui_2.ImVec2(0.0, 0.0), new imgui_2.ImVec2(s.WindowWidth, Number.MAX_VALUE)); + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, 8 /* NoScrollbar */)) { + if (ImGui.IsWindowHovered(2 /* RootWindow */ | 1 /* ChildWindows */) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new imgui_2.ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + // Memory Editor contents only + DrawContents(mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x0000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style = ImGui.GetStyle(); + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new imgui_2.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list = ImGui.GetWindowDrawList(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_2.ImVec2(0, 0)); + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_2.ImVec2(0, 0)); + const line_total_count = 0 | ((mem_size + this.Rows - 1) / this.Rows); + const clipper = new imgui_3.ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr = clipper.DisplayStart * this.Rows; + const visible_end_addr = clipper.DisplayEnd * this.Rows; + let data_next = false; + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + const data_editing_addr_backup = this.DataEditingAddr; + let data_editing_addr_next = -1; + if (this.DataEditingAddr !== -1) { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(3 /* UpArrow */)) && this.DataEditingAddr >= this.Rows) { + data_editing_addr_next = this.DataEditingAddr - this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(4 /* DownArrow */)) && this.DataEditingAddr < mem_size - this.Rows) { + data_editing_addr_next = this.DataEditingAddr + this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(1 /* LeftArrow */)) && this.DataEditingAddr > 0) { + data_editing_addr_next = this.DataEditingAddr - 1; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(2 /* RightArrow */)) && this.DataEditingAddr < mem_size - 1) { + data_editing_addr_next = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) { + // Track cursor movements + const scroll_offset = (0 | (data_editing_addr_next / this.Rows) - 0 | (data_editing_addr_backup / this.Rows)); + const scroll_desired = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + // Draw vertical separator + const window_pos = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(5 /* Border */)); + const color_text = ImGui.GetColorU32(0 /* Text */); + const color_disabled = this.OptGreyOutZeroes ? ImGui.GetColorU32(1 /* TextDisabled */) : color_text; + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) { + let addr = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + let byte_pos_x = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) { + const pos = ImGui.GetCursorScreenPos(); + let highlight_width = s.GlyphWidth * 2; + const is_next_byte_highlighted = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + if (this.DataEditingAddr === addr) { + // Display text input on current byte + let data_write = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data) { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags = 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */ | 16 /* AutoSelectAll */ | 4096 /* NoHorizontalScroll */ | 8192 /* AlwaysInsertMode */ | 256 /* CallbackAlways */; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) { + let data_input_value = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + if (this.OptShowHexII) { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + if (this.OptShowAscii) { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new imgui_2.ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + if (addr === this.DataEditingAddr) { + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(7 /* FrameBg */)); + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(40 /* TextSelectedBg */)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + if (data_next && this.DataEditingAddr < mem_size) { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) { + this.DataEditingAddr = data_editing_addr_next; + } + ImGui.Separator(); + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) + this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) + this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */)) { + // size_t goto_addr; + const goto_addr = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + if (this.GotoAddr !== -1) { + if (this.GotoAddr < mem_size) { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} +exports.MemoryEditor = MemoryEditor; +(function (MemoryEditor) { + class Sizes { + constructor() { + this.AddrDigitsCount = 0; + this.LineHeight = 0.0; + this.GlyphWidth = 0.0; + this.HexCellWidth = 0.0; + this.SpacingBetweenMidRows = 0.0; + this.PosHexStart = 0.0; + this.PosHexEnd = 0.0; + this.PosAsciiStart = 0.0; + this.PosAsciiEnd = 0.0; + this.WindowWidth = 0.0; + } + } + MemoryEditor.Sizes = Sizes; +})(MemoryEditor = exports.MemoryEditor || (exports.MemoryEditor = {})); +// #undef _PRISizeT +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfbWVtb3J5X2VkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX21lbW9yeV9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtFQUFrRTtBQUNsRSxzRUFBc0U7QUFDdEUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiw0REFBNEQ7QUFDNUQseUtBQXlLO0FBQ3pLLEVBQUU7QUFDRixTQUFTO0FBQ1QsNkdBQTZHO0FBQzdHLDRLQUE0SztBQUM1SyxFQUFFO0FBQ0YsU0FBUztBQUNULG9DQUFvQztBQUNwQyw0QkFBNEI7QUFDNUIsZ0VBQWdFO0FBQ2hFLGlCQUFpQjtBQUNqQixFQUFFO0FBQ0YsYUFBYTtBQUNiLDJCQUEyQjtBQUMzQiw4R0FBOEc7QUFDOUcsNEVBQTRFO0FBQzVFLHNIQUFzSDtBQUN0SCw2SEFBNkg7QUFDN0gsMkRBQTJEO0FBQzNELG9HQUFvRztBQUNwRywrRUFBK0U7QUFDL0UseUlBQXlJO0FBQ3pJLDhJQUE4STtBQUM5SSwyTEFBMkw7QUFDM0wsMEhBQTBIO0FBQzFILGdHQUFnRztBQUNoRyxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGFBQWE7QUFDYiw4SUFBOEk7O0FBRTlJLGVBQWU7QUFDZix3Q0FBd0M7QUFFeEMsaUNBQWlDO0FBSWpDLG1DQUF5QztBQUV6QyxtQ0FBaUM7QUFFakMsbUNBQTJDO0FBSTNDO0lBQUE7UUFFSSw0QkFBNEI7UUFFNUIsV0FBVztRQUNYLG1KQUFtSjtRQUM1SSxTQUFJLEdBQVksS0FBSyxDQUFDO1FBQzdCLDRHQUE0RztRQUNyRyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlFQUF5RTtRQUNsRSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHlFQUF5RTtRQUNsRSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUNwQyx5RUFBeUU7UUFDbEUsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDckMseUVBQXlFO1FBQ2xFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUN4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 \ No newline at end of file diff --git a/imgui_memory_editor.ts b/imgui_memory_editor.ts new file mode 100644 index 0000000..08e4234 --- /dev/null +++ b/imgui_memory_editor.ts @@ -0,0 +1,500 @@ +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. + +// #pragma once +// #include // sprintf, scanf + +import * as ImGui from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVec2 } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; + +export class MemoryEditor +{ + // typedef unsigned char u8; + + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + public Open: boolean = false; + // bool ReadOnly; // = false // set to true to disable any editing + public ReadOnly: boolean = false; + // int Rows; // = 16 // + public Rows: number = 16; + // bool OptShowAscii; // = true // + public OptShowAscii: boolean = true; + // bool OptShowHexII; // = false // + public OptShowHexII: boolean = false; + // bool OptGreyOutZeroes; // = true // + public OptGreyOutZeroes: boolean = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + public OptMidRowsCount: number = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + public OptAddrDigitsCount: number = 0; + // ImU32 HighlightColor; // // color of highlight + public HighlightColor: ImU32 = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + public ReadFn: ((data: ArrayBuffer, off: number) => number) | null = null + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + public WriteFn: ((data: ArrayBuffer, off: number, d: number) => void) | null = null + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + public HighlightFn: ((data: ArrayBuffer, off: number) => boolean) | null = null; + + // State/Internals + // bool ContentsWidthChanged; + public ContentsWidthChanged: boolean = false; + // size_t DataEditingAddr; + public DataEditingAddr: number = -1; + // bool DataEditingTakeFocus; + public DataEditingTakeFocus: boolean = false; + // char DataInputBuf[32]; + public DataInputBuf: ImStringBuffer = new ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + public AddrInputBuf: ImStringBuffer = new ImStringBuffer(32, ""); + // size_t GotoAddr; + public GotoAddr: number = -1; + // size_t HighlightMin, HighlightMax; + public HighlightMin: number = -1; + public HighlightMax: number = -1; + + public GotoAddrAndHighlight(addr_min: number, addr_max: number): void + { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + + public CalcSizes(s: MemoryEditor.Sizes, mem_size: number, base_display_addr: number): void + { + const style: ImGuiStyle = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) + { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n: number, pad: number = 0): string { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + + static sscanf_PRISizeT(s: string): number { + return parseInt(s, 16); + } + + // Standalone Memory Editor window + public DrawWindow(title: string, mem_data: ArrayBuffer, mem_size: number = mem_data.byteLength, base_display_addr: number = 0x000): void + { + const s: MemoryEditor.Sizes = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, Number.MAX_VALUE)); + + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, ImGuiWindowFlags.NoScrollbar)) + { + if (ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow | ImGuiHoveredFlags.ChildWindows) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) + { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + + // Memory Editor contents only + public DrawContents(mem_data: ArrayBuffer, mem_size: number = mem_data.byteLength, base_display_addr: number = 0x0000): void + { + const s: MemoryEditor.Sizes = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style: ImGuiStyle = ImGui.GetStyle(); + + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + ImGui.PushStyleVar(ImGui.StyleVar.FramePadding, new ImVec2(0, 0)); + ImGui.PushStyleVar(ImGui.StyleVar.ItemSpacing, new ImVec2(0, 0)); + + const line_total_count: number = 0|((mem_size + this.Rows - 1) / this.Rows); + const clipper: ImGuiListClipper = new ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr: number = clipper.DisplayStart * this.Rows; + const visible_end_addr: number = clipper.DisplayEnd * this.Rows; + + let data_next: boolean = false; + + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + + const data_editing_addr_backup: number = this.DataEditingAddr; + let data_editing_addr_next: number = -1; + if (this.DataEditingAddr !== -1) + { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.UpArrow)) && this.DataEditingAddr >= this.Rows) { data_editing_addr_next = this.DataEditingAddr - this.Rows; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.DownArrow)) && this.DataEditingAddr < mem_size - this.Rows) { data_editing_addr_next = this.DataEditingAddr + this.Rows; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.LeftArrow)) && this.DataEditingAddr > 0) { data_editing_addr_next = this.DataEditingAddr - 1; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.RightArrow)) && this.DataEditingAddr < mem_size - 1) { data_editing_addr_next = this.DataEditingAddr + 1; this.DataEditingTakeFocus = true; } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) + { + // Track cursor movements + const scroll_offset: number = (0|(data_editing_addr_next / this.Rows) - 0|(data_editing_addr_backup / this.Rows)); + const scroll_desired: boolean = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + + // Draw vertical separator + const window_pos: ImVec2 = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(ImGuiCol.Border)); + + const color_text: ImU32 = ImGui.GetColorU32(ImGuiCol.Text); + const color_disabled: ImU32 = this.OptGreyOutZeroes ? ImGui.GetColorU32(ImGuiCol.TextDisabled) : color_text; + + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) // display only visible lines + { + let addr: number = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) + { + let byte_pos_x: number = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) + { + const pos: ImVec2 = ImGui.GetCursorScreenPos(); + let highlight_width: number = s.GlyphWidth * 2; + const is_next_byte_highlighted: boolean = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) + { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + + if (this.DataEditingAddr === addr) + { + // Display text input on current byte + let data_write: boolean = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) + { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data: ImGuiTextEditCallbackData): number + { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) + { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags: ImGui.InputTextFlags = ImGui.InputTextFlags.CharsHexadecimal | ImGui.InputTextFlags.EnterReturnsTrue | ImGui.InputTextFlags.AutoSelectAll | ImGui.InputTextFlags.NoHorizontalScroll | ImGui.InputTextFlags.AlwaysInsertMode | ImGui.InputTextFlags.CallbackAlways; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) + { + let data_input_value: number = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else + { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b: number = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + + if (this.OptShowHexII) + { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else + { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) + { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + + if (this.OptShowAscii) + { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos: ImVec2 = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) + { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) + { + if (addr === this.DataEditingAddr) + { + draw_list.AddRectFilled(pos, new ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(ImGuiCol.FrameBg)); + draw_list.AddRectFilled(pos, new ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(ImGuiCol.TextSelectedBg)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c: number = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c: string = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + + if (data_next && this.DataEditingAddr < mem_size) + { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) + { + this.DataEditingAddr = data_editing_addr_next; + } + + ImGui.Separator(); + + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) + { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, ImGui.InputTextFlags.CharsHexadecimal | ImGui.InputTextFlags.EnterReturnsTrue)) + { + // size_t goto_addr; + const goto_addr: number = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + + if (this.GotoAddr !== -1) + { + if (this.GotoAddr < mem_size) + { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} + +export namespace MemoryEditor { + export class Sizes { + public AddrDigitsCount: number /* int */ = 0; + public LineHeight: number /* float */ = 0.0; + public GlyphWidth: number /* float */ = 0.0; + public HexCellWidth: number /* float */ = 0.0; + public SpacingBetweenMidRows: number /* float */ = 0.0; + public PosHexStart: number /* float */ = 0.0; + public PosHexEnd: number /* float */ = 0.0; + public PosAsciiStart: number /* float */ = 0.0; + public PosAsciiEnd: number /* float */ = 0.0; + public WindowWidth: number /* float */ = 0.0; + } +} + +// #undef _PRISizeT \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..14b2278 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "imgui-js", + "version": "1.0.0", + "description": "JavaScript bindings for Dear ImGui using Emscripten and TypeScript", + "main": "imgui.js", + "types": "imgui.ts", + "scripts": { + "dev": "http-server", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "@types/emscripten": "0.0.31", + "@types/node": "^4.0.36", + "@types/systemjs": "^0.20.6", + "http-server": "^0.11.1", + "systemjs": "^0.20.19", + "typescript": "^2.7.1" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49fe2f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +package-lock.json +.vscode +imgui.ini +**/*.bc \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..81117b5 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Flyover Games, LLC + +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/Makefile b/Makefile new file mode 100644 index 0000000..551bfeb --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# grep -o "STATIC(\"\w*\"" imgui_demo.ts | sort | uniq -d + +IMGUI_PATH = imgui +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imconfig.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/imgui_internal.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_rect_pack.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_textedit.h +IMGUI_SOURCE_HXX += $(IMGUI_PATH)/stb_truetype.h +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_draw.cpp +IMGUI_SOURCE_CXX += $(IMGUI_PATH)/imgui_demo.cpp +IMGUI_OUTPUT_BC = $(IMGUI_SOURCE_CXX:%.cpp=%.bc) + +BIND_IMGUI_SOURCE_D_TS = bind-imgui.d.ts +BIND_IMGUI_SOURCE_CXX = bind-imgui.cpp +BIND_IMGUI_OUTPUT_BC = bind-imgui.bc +BIND_IMGUI_OUTPUT_JS = bind-imgui.js + +IMGUI_JS_SOURCE_TS += imgui.ts +IMGUI_JS_SOURCE_TS += imgui_demo.ts +IMGUI_JS_SOURCE_TS += imgui_memory_editor.ts +IMGUI_JS_OUTPUT_JS = $(IMGUI_JS_SOURCE_TS:%.ts=%.js) + +IMGUI_JS_EXAMPLE_SOURCE_TS += example/main.ts +IMGUI_JS_EXAMPLE_SOURCE_TS += example/imgui_impl.ts +IMGUI_JS_EXAMPLE_OUTPUT_JS = $(IMGUI_JS_EXAMPLE_SOURCE_TS:%.ts=%.js) + +# FLAGS += -g4 +FLAGS += -Os +FLAGS += -s NO_FILESYSTEM=1 +# FLAGS += -s WASM=1 +# FLAGS += -s MODULARIZE=1 +# FLAGS += -s EXPORT_NAME=\"ImGui\" +FLAGS += -s EXPORT_BINDINGS=1 +# FLAGS += -s EXPORT_ALL=1 +# FLAGS += -s MEM_INIT_METHOD=0 +# FLAGS += --memory-init-file 0 +FLAGS += -s SINGLE_FILE=1 +FLAGS += -s BINARYEN_ASYNC_COMPILATION=0 +# FLAGS += -s TOTAL_MEMORY=4194304 + +FLAGS += -D IMGUI_DISABLE_OBSOLETE_FUNCTIONS +FLAGS += -D IMGUI_DISABLE_DEMO_WINDOWS + +all: start-example-node + +dev: start-example-html + +build: build-imgui-js build-example + +clean: clean-imgui-js clean-example + +# imgui-js + +build-imgui-js: $(IMGUI_JS_OUTPUT_JS) bind-imgui.js +# build-imgui-js: $(word 1, $(IMGUI_JS_OUTPUT_JS)) bind-imgui.js + +clean-imgui-js: + rm -f $(IMGUI_OUTPUT_BC) + rm -f $(BIND_IMGUI_OUTPUT_BC) + rm -f bind-imgui.js bind-imgui.js.* + rm -f bind-imgui.wasm bind-imgui.wasm.* + rm -f $(IMGUI_JS_OUTPUT_JS) + +%.bc: %.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) $< -o $@ + +bind-imgui.bc: bind-imgui.cpp $(IMGUI_SOURCE_HXX) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $< -o $@ + +bind-imgui.js: $(IMGUI_OUTPUT_BC) $(BIND_IMGUI_OUTPUT_BC) + emcc $(FLAGS) -I $(IMGUI_PATH) --bind $^ -o $@ + +$(IMGUI_JS_SOURCE_TS): bind-imgui.d.ts tsconfig.json + +# %.js: %.ts +# $(IMGUI_JS_OUTPUT_JS): $(IMGUI_JS_SOURCE_TS) +imgui.js: imgui.ts +imgui_demo.js: imgui_demo.ts +imgui_memory_editor.js: imgui_memory_editor.ts +# $(word 1, $(IMGUI_JS_OUTPUT_JS)): $(IMGUI_JS_SOURCE_TS) + $$(npm bin)/tsc -p . + +# example + +build-example: $(IMGUI_JS_EXAMPLE_OUTPUT_JS) build-imgui-js +# build-example: $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)) build-imgui-js + +clean-example: + rm -f $(IMGUI_JS_EXAMPLE_OUTPUT_JS) + +$(IMGUI_JS_EXAMPLE_SOURCE_TS): bind-imgui.d.ts example/tsconfig.json + +# example/%.js: example/%.ts +# $(IMGUI_JS_EXAMPLE_OUTPUT_JS): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +# $(word 1, $(IMGUI_JS_EXAMPLE_OUTPUT_JS)): $(IMGUI_JS_EXAMPLE_SOURCE_TS) +example/main.js: example/main.ts +example/imgui_impl.js: example/imgui_impl.ts + $$(npm bin)/tsc -p example + +start-example: start-example-node + +start-example-node: build-example + node example/index.js + +start-example-html: + @echo "open http://localhost:8080/example/index.html" + $$(npm bin)/http-server + +# native-example + +IMGUI_NATIVE_EXAMPLE_PATH = $(IMGUI_PATH)/examples/sdl_opengl2_example +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/main.cpp +IMGUI_NATIVE_EXAMPLE_SOURCE_CXX += $(IMGUI_NATIVE_EXAMPLE_PATH)/imgui_impl_sdl.cpp + +build-native-example: +# windows +# set SDL2DIR=C:\SDL2 && cl /Zi /MD /I $(IMGUI_NATIVE_EXAMPLE_PATH) /I $(IMGUI_PATH) /I %SDL2DIR%\include $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) /link /LIBPATH:%SDL2DIR%\lib SDL2.lib SDL2main.lib opengl32.lib /subsystem:console /Fe $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows.exe +# linux + c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) -D HAVE_MALLINFO $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -lGL -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# macos +# c++ `sdl2-config --cflags` -I $(IMGUI_NATIVE_EXAMPLE_PATH) -I $(IMGUI_PATH) $(IMGUI_NATIVE_EXAMPLE_SOURCE_CXX) $(IMGUI_SOURCE_CXX) `sdl2-config --libs` -framework OpenGl -o $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +clean-native-example: +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# rm -f $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos + +start-native-example: +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-windows + $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-linux +# $(IMGUI_NATIVE_EXAMPLE_PATH)/sdl2example-macos diff --git a/bind-imgui.cpp b/bind-imgui.cpp new file mode 100644 index 0000000..e313bfd --- /dev/null +++ b/bind-imgui.cpp @@ -0,0 +1,2223 @@ +#include "imgui.h" + +#ifndef __FLT_MAX__ +#define __FLT_MAX__ 3.40282346638528859812e+38F +#endif + +#if defined(IMGUI_DISABLE_DEMO_WINDOWS) +// warning: unresolved symbol: _ZN5ImGui17ShowStyleSelectorEPKc +bool ImGui::ShowStyleSelector(const char*) { return false; } +// warning: unresolved symbol: _ZN5ImGui16ShowFontSelectorEPKc +void ImGui::ShowFontSelector(const char*) {} +#endif + +#include + +#define FUNCTION(RET, ARGS, CODE...) \ + emscripten::select_overload([] ARGS -> RET { CODE }) + +#include + +emscripten::val get_mallinfo() { + const auto& i = mallinfo(); + emscripten::val rv(emscripten::val::object()); + rv.set("arena", emscripten::val(i.arena)); + rv.set("ordblks", emscripten::val(i.ordblks)); + rv.set("smblks", emscripten::val(i.smblks)); + rv.set("hblks", emscripten::val(i.hblks)); + rv.set("hblkhd", emscripten::val(i.hblkhd)); + rv.set("usmblks", emscripten::val(i.usmblks)); + rv.set("fsmblks", emscripten::val(i.fsmblks)); + rv.set("uordblks", emscripten::val(i.uordblks)); + rv.set("fordblks", emscripten::val(i.fordblks)); + rv.set("keepcost", emscripten::val(i.keepcost)); + return rv; +} + +EMSCRIPTEN_BINDINGS(mallinfo) { + emscripten::function("mallinfo", &get_mallinfo); +} + +#define TODO() printf("TODO: %s\n", __PRETTY_FUNCTION__) + +ImVec2 import_ImVec2(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + return ImVec2(x, y); +} + +emscripten::val export_ImVec2(const ImVec2& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + return out; +} + +emscripten::val ImVec2_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + return emscripten::val(that); +} + +bool ImVec2_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec2) { + emscripten::class_("ImVec2") + .constructor() + .constructor() + .property("x", &ImVec2::x) + .property("y", &ImVec2::y) + .function("Copy", &ImVec2_Copy) + .function("Equals", &ImVec2_Equals) + ; +} + +ImVec4 import_ImVec4(const emscripten::val& value) { + float x = value["x"].as(); + float y = value["y"].as(); + float z = value["z"].as(); + float w = value["w"].as(); + return ImVec4(x, y, z, w); +} + +emscripten::val export_ImVec4(const ImVec4& v, emscripten::val out) { + // emscripten::val out = emscripten::val::object(); + out.set("x", v.x); + out.set("y", v.y); + out.set("z", v.z); + out.set("w", v.w); + return out; +} + +emscripten::val ImVec4_Copy(emscripten::val that, emscripten::val other) { + that.set("x", other["x"].as()); + that.set("y", other["y"].as()); + that.set("z", other["z"].as()); + that.set("w", other["w"].as()); + return emscripten::val(that); +} + +bool ImVec4_Equals(const emscripten::val that, emscripten::val other) { + if (that["x"].as() != other["x"].as()) { return false; } + if (that["y"].as() != other["y"].as()) { return false; } + if (that["z"].as() != other["z"].as()) { return false; } + if (that["w"].as() != other["w"].as()) { return false; } + return true; +} + +EMSCRIPTEN_BINDINGS(ImVec4) { + emscripten::class_("ImVec4") + .constructor() + .constructor() + .property("x", &ImVec4::x) + .property("y", &ImVec4::y) + .property("z", &ImVec4::z) + .property("w", &ImVec4::w) + .function("Copy", &ImVec4_Copy) + .function("Equals", &ImVec4_Equals) + ; +} + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +// struct ImGuiTextEditCallbackData +EMSCRIPTEN_BINDINGS(ImGuiTextEditCallbackData) { + emscripten::class_("ImGuiTextEditCallbackData") + .constructor() + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + .property("EventFlag", &ImGuiTextEditCallbackData::EventFlag) + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + .property("Flags", &ImGuiTextEditCallbackData::Flags) + // void* UserData; // What user passed to InputText() // Read-only + // bool ReadOnly; // Read-only mode // Read-only + .property("ReadOnly", &ImGuiTextEditCallbackData::ReadOnly) + + // // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + .property("EventChar", &ImGuiTextEditCallbackData::EventChar) + + // // Completion,History,Always events: + // // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + .property("EventKey", &ImGuiTextEditCallbackData::EventKey) + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + .function("getBuf", FUNCTION(std::string, (const ImGuiTextEditCallbackData& that), { + return that.Buf; + })) + .function("setBuf", FUNCTION(void, (const ImGuiTextEditCallbackData& that, std::string value), { + strcpy(that.Buf, value.c_str()); + })) + // int BufTextLen; // Current text length in bytes // Read-write + .property("BufTextLen", &ImGuiTextEditCallbackData::BufTextLen) + // int BufSize; // Maximum text length in bytes // Read-only + .property("BufSize", &ImGuiTextEditCallbackData::BufSize) + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + .property("BufDirty", &ImGuiTextEditCallbackData::BufDirty) + // int CursorPos; // // Read-write + .property("CursorPos", &ImGuiTextEditCallbackData::CursorPos) + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + .property("SelectionStart", &ImGuiTextEditCallbackData::SelectionStart) + // int SelectionEnd; // // Read-write + .property("SelectionEnd", &ImGuiTextEditCallbackData::SelectionEnd) + + // // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + .function("DeleteChars", &ImGuiTextEditCallbackData::DeleteChars) + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + .function("InsertChars", FUNCTION(void, (ImGuiTextEditCallbackData& that, int pos, std::string text, emscripten::val text_end), { + that.InsertChars(pos, text.c_str()); + })) + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + .function("HasSelection", &ImGuiTextEditCallbackData::HasSelection) + ; +} + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +// struct ImGuiSizeConstraintCallbackData +// { +// void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() +// ImVec2 Pos; // Read-only. Window position, for reference. +// ImVec2 CurrentSize; // Read-only. Current window size. +// ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. +// }; +EMSCRIPTEN_BINDINGS(ImGuiSizeConstraintCallbackData) { + emscripten::class_("ImGuiSizeConstraintCallbackData") + .constructor() + .function("getPos", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.Pos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getCurrentSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.CurrentSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .function("getDesiredSize", FUNCTION(emscripten::val, (const ImGuiSizeConstraintCallbackData& that), { + const ImVec2* p = &that.DesiredSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiListClipper) { + emscripten::class_("ImGuiListClipper") + .constructor() + .constructor() + .constructor() + .property("StartPosY", &ImGuiListClipper::StartPosY) + .property("ItemsHeight", &ImGuiListClipper::ItemsHeight) + .property("ItemsCount", &ImGuiListClipper::ItemsCount) + .property("StepNo", &ImGuiListClipper::StepNo) + .property("DisplayStart", &ImGuiListClipper::DisplayStart) + .property("DisplayEnd", &ImGuiListClipper::DisplayEnd) + .function("Step", &ImGuiListClipper::Step) + .function("Begin", &ImGuiListClipper::Begin) + .function("End", &ImGuiListClipper::End) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawCmd) { + emscripten::class_("ImDrawCmd") + .property("ElemCount", &ImDrawCmd::ElemCount) + .function("getClipRect", FUNCTION(emscripten::val, (const ImDrawCmd* that), { + const ImVec4* p = &that->ClipRect; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + .property("TextureId", FUNCTION(emscripten::val, (const ImDrawCmd& that), { + return (that.TextureId != NULL) ? *(emscripten::val*) that.TextureId : emscripten::val::null(); + })) + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawList) { + emscripten::class_("ImDrawList") + .function("IterateDrawCmds", FUNCTION(void, (const ImDrawList* that, emscripten::val callback), { + unsigned int ElemStart = 0; + for (const ImDrawCmd* pcmd = that->CmdBuffer.begin(); pcmd != that->CmdBuffer.end(); pcmd++) { + callback(emscripten::val(pcmd), emscripten::val(ElemStart)); + ElemStart += pcmd->ElemCount; + } + }), emscripten::allow_raw_pointers()) + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + .property("IdxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.IdxBuffer.size() * sizeof(ImDrawIdx)), (char *) &that.IdxBuffer.front())); + })) + // ImVector VtxBuffer; // Vertex buffer. + .property("VtxBuffer", FUNCTION(emscripten::val, (const ImDrawList& that), { + return emscripten::val(emscripten::typed_memory_view((size_t)(that.VtxBuffer.size() * sizeof(ImDrawVert)), (char *) &that.VtxBuffer.front())); + })) + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + .function("PushClipRect", FUNCTION(void, (ImDrawList& that, emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + that.PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })) + // IMGUI_API void PushClipRectFullScreen(); + .function("PushClipRectFullScreen", &ImDrawList::PushClipRectFullScreen) + // IMGUI_API void PopClipRect(); + .function("PopClipRect", &ImDrawList::PopClipRect) + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + .function("AddLine", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float thickness), { + that.AddLine(import_ImVec2(a), import_ImVec2(b), col, thickness); + })) + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + .function("AddRect", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags, float thickness), { + that.AddRect(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags, thickness); + })) + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + .function("AddRectFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col, float rounding, int rounding_corners_flags), { + that.AddRectFilled(import_ImVec2(a), import_ImVec2(b), col, rounding, rounding_corners_flags); + })) + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + .function("AddRectFilledMultiColor", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left), { + that.AddRectFilledMultiColor(import_ImVec2(a), import_ImVec2(b), col_upr_left, col_upr_right, col_bot_right, col_bot_left); + })) + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + .function("AddQuad", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col, float thickness), { + that.AddQuad(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col, thickness); + })) + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + .function("AddQuadFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, ImU32 col), { + that.AddQuadFilled(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), import_ImVec2(d), col); + })) + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + .function("AddTriangle", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col, float thickness), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col, thickness); + })) + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + .function("AddTriangleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val a, emscripten::val b, emscripten::val c, ImU32 col), { + that.AddTriangle(import_ImVec2(a), import_ImVec2(b), import_ImVec2(c), col); + })) + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + .function("AddCircle", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments, float thickness), { + that.AddCircle(import_ImVec2(centre), radius, col, num_segments, thickness); + })) + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + .function("AddCircleFilled", FUNCTION(void, (ImDrawList& that, emscripten::val centre, float radius, ImU32 col, int num_segments), { + that.AddCircleFilled(import_ImVec2(centre), radius, col, num_segments); + })) + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + .function("AddText", FUNCTION(void, (ImDrawList& that, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end), { + that.AddText(import_ImVec2(pos), col, text_begin.c_str(), NULL); + })) + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + .function("AddText_Font", FUNCTION(void, (ImDrawList& that, emscripten::val font, float font_size, emscripten::val pos, ImU32 col, std::string text_begin, emscripten::val text_end, float wrap_width, emscripten::val cpu_fine_clip_rect), { + ImFont* _font = font.as(emscripten::allow_raw_pointers()); + ImVec4 _cpu_fine_clip_rect; + if (!cpu_fine_clip_rect.isNull()) { + _cpu_fine_clip_rect = import_ImVec4(cpu_fine_clip_rect); + } + that.AddText(_font, font_size, import_ImVec2(pos), col, text_begin.c_str(), NULL, wrap_width, cpu_fine_clip_rect.isNull() ? NULL : &_cpu_fine_clip_rect); + })) + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImage", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col), {})) + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // .function("AddImageQuad", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val c, emscripten::val d, emscripten::val uv_a, emscripten::val uv_b, emscripten::val uv_c, emscripten::val uv_d, ImU32 col), {})) + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // .function("AddImageRounded", FUNCTION(void, (ImDrawList& that, ImTextureID user_texture_id, emscripten::val a, emscripten::val b, emscripten::val uv_a, emscripten::val uv_b, ImU32 col, float rounding, int rounding_corners), {})) + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // .function("AddPolyline", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness), {})) + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // .function("AddConvexPolyFilled", FUNCTION(void, (const ImVec2* points, const int num_points, ImU32 col), {})) + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + .function("AddBezierCurve", FUNCTION(void, (ImDrawList& that, emscripten::val pos0, emscripten::val cp0, emscripten::val cp1, emscripten::val pos1, ImU32 col, float thickness, int num_segments), { + that.AddBezierCurve(import_ImVec2(pos0), import_ImVec2(cp0), import_ImVec2(cp1), import_ImVec2(pos1), col, thickness, num_segments); + })) + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); + ; +} + +EMSCRIPTEN_BINDINGS(ImDrawData) { + emscripten::class_("ImDrawData") + .function("IterateDrawLists", FUNCTION(void, (const ImDrawData* that, emscripten::val callback), { + for (int n = 0; n < that->CmdListsCount; n++) { + const ImDrawList* cmd_list = that->CmdLists[n]; + callback(emscripten::val(cmd_list)); + } + }), emscripten::allow_raw_pointers()) + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + .property("Valid", &ImDrawData::Valid) + // ImDrawList** CmdLists; + // int CmdListsCount; + .property("CmdListsCount", &ImDrawData::CmdListsCount) + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + .property("TotalVtxCount", &ImDrawData::TotalVtxCount) + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + .property("TotalIdxCount", &ImDrawData::TotalIdxCount) + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + .function("ScaleClipRects", FUNCTION(void, (ImDrawData* that, emscripten::val sc), { + that->ScaleClipRects(import_ImVec2(sc)); + }), emscripten::allow_raw_pointers()) + ; +} + +EMSCRIPTEN_BINDINGS(ImFont) { + emscripten::class_("ImFont") + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + .function("GetDebugName", FUNCTION(std::string, (const ImFont& that), { return that.GetDebugName(); })) + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif + ; +} + +EMSCRIPTEN_BINDINGS(ImFontAtlas) { + emscripten::class_("ImFontAtlas") + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + .function("GetTexDataAsRGBA32", FUNCTION(emscripten::val, (ImFontAtlas& that), { + unsigned char* pixels = NULL; + int width = -1; + int height = -1; + int bytes_per_pixel = -1; + that.GetTexDataAsRGBA32(&pixels, &width, &height, &bytes_per_pixel); + emscripten::val tex_data = emscripten::val::object(); + tex_data.set(emscripten::val("pixels"), emscripten::val(emscripten::typed_memory_view(width * height * 4, pixels))); + tex_data.set(emscripten::val("width"), emscripten::val(width)); + tex_data.set(emscripten::val("height"), emscripten::val(height)); + return tex_data; + })) + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + .function("getTexID", FUNCTION(emscripten::val, (const ImFontAtlas* that), { + return (that->TexID == NULL) ? emscripten::val::null() : *(emscripten::val*) that->TexID; + }), emscripten::allow_raw_pointers()) + .function("setTexID", FUNCTION(void, (ImFontAtlas* that, emscripten::val value), { + if (that->TexID) { delete (emscripten::val*) that->TexID; } + that->TexID = (value.isNull()) ? NULL : new emscripten::val(value); + }), emscripten::allow_raw_pointers()) + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + .property("TexWidth", &ImFontAtlas::TexWidth) + // int TexHeight; // Texture height calculated during Build(). + .property("TexHeight", &ImFontAtlas::TexHeight) + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiIO) { + emscripten::class_("ImGuiIO") + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + .function("getDisplaySize", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplaySize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + .property("DeltaTime", &ImGuiIO::DeltaTime) + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + .function("getKeyMapAt", FUNCTION(int, (const ImGuiIO* that, int /*ImGuiKey*/ index), { + return (0 <= index && index < ImGuiKey_COUNT) ? that->KeyMap[index] : -1; + }), emscripten::allow_raw_pointers()) + .function("setKeyMapAt", FUNCTION(bool, (ImGuiIO* that, int /*ImGuiKey*/ index, int value), { + if (0 <= index && index < ImGuiKey_COUNT) { that->KeyMap[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + .function("getFonts", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImFontAtlas* p = that->Fonts; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FontGlobalScale; // = 1.0f // Global scale all fonts + .property("FontGlobalScale", &ImGuiIO::FontGlobalScale) + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + .function("getDisplayFramebufferScale", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->DisplayFramebufferScale; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + .function("getMousePos", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MousePos; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + .function("getMouseDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setMouseDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 5) { that->MouseDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + .property("MouseWheel", &ImGuiIO::MouseWheel) + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + .property("MouseDrawCursor", &ImGuiIO::MouseDrawCursor) + // bool KeyCtrl; // Keyboard modifier pressed: Control + .property("KeyCtrl", &ImGuiIO::KeyCtrl) + // bool KeyShift; // Keyboard modifier pressed: Shift + .property("KeyShift", &ImGuiIO::KeyShift) + // bool KeyAlt; // Keyboard modifier pressed: Alt + .property("KeyAlt", &ImGuiIO::KeyAlt) + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + .property("KeySuper", &ImGuiIO::KeySuper) + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + .function("getKeysDownAt", FUNCTION(bool, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDown[index] : false; + }), emscripten::allow_raw_pointers()) + .function("setKeysDownAt", FUNCTION(bool, (ImGuiIO* that, int index, bool value), { + if (0 <= index && index < 512) { that->KeysDown[index] = value; return true; } return false; + }), emscripten::allow_raw_pointers()) + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + .function("AddInputCharacter", &ImGuiIO::AddInputCharacter) + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + .property("WantCaptureMouse", &ImGuiIO::WantCaptureMouse) + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + .property("WantCaptureKeyboard", &ImGuiIO::WantCaptureKeyboard) + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + .property("WantTextInput", &ImGuiIO::WantTextInput) + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + .property("WantMoveMouse", &ImGuiIO::WantMoveMouse) + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + .property("Framerate", &ImGuiIO::Framerate) + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + .function("getMouseDelta", FUNCTION(emscripten::val, (ImGuiIO* that), { + ImVec2* p = &that->MouseDelta; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + .function("getMouseDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 5) ? that->MouseDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + .function("getKeysDownDurationAt", FUNCTION(float, (const ImGuiIO* that, int index), { + return (0 <= index && index < 512) ? that->KeysDownDuration[index] : -1.0f; + }), emscripten::allow_raw_pointers()) + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); + ; +} + +EMSCRIPTEN_BINDINGS(ImGuiStyle) { + emscripten::class_("ImGuiStyle") + .constructor() + // float Alpha; // Global alpha applies to everything in ImGui + .property("Alpha", &ImGuiStyle::Alpha) + // ImVec2 WindowPadding; // Padding within a window + .function("getWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + .property("WindowRounding", &ImGuiStyle::WindowRounding) + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("WindowBorderSize", &ImGuiStyle::WindowBorderSize) + // ImVec2 WindowMinSize; // Minimum window size + .function("getWindowMinSize", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowMinSize; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + .function("getWindowTitleAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->WindowTitleAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + .property("ChildRounding", &ImGuiStyle::ChildRounding) + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("ChildBorderSize", &ImGuiStyle::ChildBorderSize) + // float PopupRounding; // Radius of popup window corners rounding. + .property("PopupRounding", &ImGuiStyle::PopupRounding) + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("PopupBorderSize", &ImGuiStyle::PopupBorderSize) + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + .function("getFramePadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->FramePadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + .property("FrameRounding", &ImGuiStyle::FrameRounding) + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + .property("FrameBorderSize", &ImGuiStyle::FrameBorderSize) + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + .function("getItemSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + .function("getItemInnerSpacing", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ItemInnerSpacing; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + .function("getTouchExtraPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->TouchExtraPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + .property("IndentSpacing", &ImGuiStyle::IndentSpacing) + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + .property("ColumnsMinSpacing", &ImGuiStyle::ColumnsMinSpacing) + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + .property("ScrollbarSize", &ImGuiStyle::ScrollbarSize) + // float ScrollbarRounding; // Radius of grab corners for scrollbar + .property("ScrollbarRounding", &ImGuiStyle::ScrollbarRounding) + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + .property("GrabMinSize", &ImGuiStyle::GrabMinSize) + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + .property("GrabRounding", &ImGuiStyle::GrabRounding) + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + .function("getButtonTextAlign", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->ButtonTextAlign; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + .function("getDisplayWindowPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplayWindowPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + .function("getDisplaySafeAreaPadding", FUNCTION(emscripten::val, (ImGuiStyle* that), { + ImVec2* p = &that->DisplaySafeAreaPadding; return emscripten::val(p); + }), emscripten::allow_raw_pointers()) + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + .property("AntiAliasedLines", &ImGuiStyle::AntiAliasedLines) + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + .property("AntiAliasedFill", &ImGuiStyle::AntiAliasedFill) + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + .property("CurveTessellationTol", &ImGuiStyle::CurveTessellationTol) + // ImVec4 Colors[ImGuiCol_COUNT]; + .function("getColorsAt", FUNCTION(emscripten::val, (ImGuiStyle* that, int index), { + ImVec4* p = &that->Colors[index]; return (0 <= index && index < ImGuiCol_COUNT) ? emscripten::val(p) : emscripten::val::undefined(); + }), emscripten::allow_raw_pointers()) + .function("setColorsAt", FUNCTION(bool, (ImGuiStyle* that, int index, emscripten::val value), { + if (0 <= index && index < ImGuiCol_COUNT) { that->Colors[index] = import_ImVec4(value); return true; } return false; + }), emscripten::allow_raw_pointers()) + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + .function("ScaleAllSizes", &ImGuiStyle::ScaleAllSizes) + ; +} + +// EMSCRIPTEN_BINDINGS(ImGuiContext) { +// emscripten::class_("ImGuiContext") +// ; +// } + +static emscripten::val _PlotLines_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotLines_data = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_values_getter = emscripten::val::undefined(); +static emscripten::val _PlotHistogram_data = emscripten::val::undefined(); + +EMSCRIPTEN_BINDINGS(ImGui) { + emscripten::constant("IMGUI_VERSION", std::string(IMGUI_VERSION)); + + emscripten::constant("ImDrawVertSize", sizeof(ImDrawVert)); + emscripten::constant("ImDrawIdxSize", sizeof(ImDrawIdx)); + #define OFFSETOF(TYPE, ELEMENT) ((int)&(((TYPE *)0)->ELEMENT)) + emscripten::constant("ImDrawVertPosOffset", OFFSETOF(ImDrawVert, pos)); + emscripten::constant("ImDrawVertUVOffset", OFFSETOF(ImDrawVert, uv)); + emscripten::constant("ImDrawVertColOffset", OFFSETOF(ImDrawVert, col)); + #undef OFFSETOF + + // Main + // IMGUI_API ImGuiIO& GetIO(); + emscripten::function("GetIO", FUNCTION(emscripten::val, (), { + static bool once = false; + if (!once) { + once = true; + ImGui::GetIO().IniFilename = NULL; + ImGui::GetIO().LogFilename = NULL; + } + ImGuiIO* p = &ImGui::GetIO(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImGuiStyle& GetStyle(); + emscripten::function("GetStyle", FUNCTION(emscripten::val, (), { + ImGuiStyle* p = &ImGui::GetStyle(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() + emscripten::function("GetDrawData", FUNCTION(emscripten::val, (), { + ImDrawData* p = ImGui::GetDrawData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). + emscripten::function("NewFrame", &ImGui::NewFrame); + // IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. + emscripten::function("Render", FUNCTION(void, (), { + // static emscripten::val g_wrapRenderDrawListsFn = emscripten::val::undefined(); + // ImGuiIO& io = ImGui::GetIO(); + // io.RenderDrawListsFn = FUNCTION(void, (ImDrawData* draw_data), { + // if (!g_wrapRenderDrawListsFn.isUndefined()) { + // g_wrapRenderDrawListsFn(emscripten::val(draw_data)); + // } + // }); + ImGui::Render(); + // io.RenderDrawListsFn = NULL; + })); + // IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! + emscripten::function("EndFrame", &ImGui::EndFrame); + // IMGUI_API void Shutdown(); + emscripten::function("Shutdown", &ImGui::Shutdown); + + // Demo, Debug, Informations + // IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! + emscripten::function("ShowDemoWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowDemoWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowDemoWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. + emscripten::function("ShowMetricsWindow", FUNCTION(void, (emscripten::val p_open), { + if (p_open.isNull()) { + ImGui::ShowMetricsWindow(); + } else { + bool open = p_open[0].as(); + ImGui::ShowMetricsWindow(&open); + p_open.set(0, emscripten::val(open)); + } + })); + // IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) + emscripten::function("ShowStyleEditor", FUNCTION(void, (emscripten::val ref), { + if (ref.isNull()) { + ImGui::ShowStyleEditor(); + } else { + ImGuiStyle* _ref = ref.as(emscripten::allow_raw_pointers()); + ImGui::ShowStyleEditor(_ref); + } + })); + // IMGUI_API bool ShowStyleSelector(const char* label); + emscripten::function("ShowStyleSelector", FUNCTION(void, (std::string label), { + ImGui::ShowStyleSelector(label.c_str()); + })); + // IMGUI_API void ShowFontSelector(const char* label); + emscripten::function("ShowFontSelector", FUNCTION(void, (std::string label), { + ImGui::ShowFontSelector(label.c_str()); + })); + // IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). + emscripten::function("ShowUserGuide", &ImGui::ShowUserGuide); + + // Window + // IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). + emscripten::function("Begin", FUNCTION(bool, (std::string label, emscripten::val p_open, ImGuiWindowFlags flags), { + if (p_open.isNull()) { + return ImGui::Begin(label.c_str(), NULL, flags); + } else { + bool open = p_open[0].as(); + bool ret = ImGui::Begin(label.c_str(), &open, flags); + p_open.set(0, emscripten::val(open)); + return ret; + } + })); + // IMGUI_API void End(); // finish appending to current window, pop it off the window stack. + emscripten::function("End", &ImGui::End); + // IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). + // IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " + emscripten::function("BeginChild", FUNCTION(bool, (emscripten::val id, emscripten::val size, bool border, ImGuiWindowFlags extra_flags), { + if (id.typeOf().equals(emscripten::val("string"))) { + return ImGui::BeginChild(id.as().c_str(), import_ImVec2(size), border, extra_flags); + } else { + return ImGui::BeginChild(id.as(), import_ImVec2(size), border, extra_flags); + } + })); + // IMGUI_API void EndChild(); + emscripten::function("EndChild", &ImGui::EndChild); + // IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates + emscripten::function("GetContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionMax(), out); + })); + // IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() + emscripten::function("GetContentRegionAvail", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetContentRegionAvail(), out); + })); + // IMGUI_API float GetContentRegionAvailWidth(); // + emscripten::function("GetContentRegionAvailWidth", &ImGui::GetContentRegionAvailWidth); + // IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates + emscripten::function("GetWindowContentRegionMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMin(), out); + })); + // IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates + emscripten::function("GetWindowContentRegionMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowContentRegionMax(), out); + })); + // IMGUI_API float GetWindowContentRegionWidth(); // + emscripten::function("GetWindowContentRegionWidth", &ImGui::GetWindowContentRegionWidth); + // IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives + emscripten::function("GetWindowDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetWindowDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) + emscripten::function("GetWindowPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowPos(), out); + })); + // IMGUI_API ImVec2 GetWindowSize(); // get current window size + emscripten::function("GetWindowSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetWindowSize(), out); + })); + // IMGUI_API float GetWindowWidth(); + emscripten::function("GetWindowWidth", &ImGui::GetWindowWidth); + // IMGUI_API float GetWindowHeight(); + emscripten::function("GetWindowHeight", &ImGui::GetWindowHeight); + // IMGUI_API bool IsWindowCollapsed(); + emscripten::function("IsWindowCollapsed", &ImGui::IsWindowCollapsed); + // IMGUI_API bool IsWindowAppearing(); + emscripten::function("IsWindowAppearing", &ImGui::IsWindowAppearing); + // IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows + emscripten::function("SetWindowFontScale", &ImGui::SetWindowFontScale); + + // IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. + emscripten::function("SetNextWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond, emscripten::val pivot), { + ImGui::SetNextWindowPos(import_ImVec2(pos), cond, import_ImVec2(pivot)); + })); + // IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() + emscripten::function("SetNextWindowSize", FUNCTION(void, (emscripten::val size, ImGuiCond cond), { + ImGui::SetNextWindowSize(import_ImVec2(size), cond); + })); + // IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + emscripten::function("SetNextWindowSizeConstraints", FUNCTION(void, (emscripten::val size_min, emscripten::val size_max, emscripten::val custom_callback, emscripten::val custom_callback_data), { + if (!custom_callback.isUndefined() && !custom_callback.isNull()) { + static emscripten::val _custom_callback = custom_callback; + static emscripten::val _custom_callback_data = custom_callback_data; + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max), FUNCTION(void, (ImGuiSizeConstraintCallbackData* data), { + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + // ImVec2 Pos; // Read-only. Window position, for reference. + // ImVec2 CurrentSize; // Read-only. Current window size. + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + // emscripten::val _data = emscripten::val::object(); + // _data.set("UserData", _custom_callback_data); + // const ImVec2* Pos = &data->Pos; _data.set("Pos", emscripten::val(Pos)); + // const ImVec2* CurrentSize = &data->CurrentSize; _data.set("CurrentSize", emscripten::val(CurrentSize)); + // const ImVec2* DesiredSize = &data->DesiredSize; _data.set("DesiredSize", emscripten::val(DesiredSize)); + // _custom_callback(_data); + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _custom_callback_data); + _custom_callback(_data); + }), NULL); + } else { + ImGui::SetNextWindowSizeConstraints(import_ImVec2(size_min), import_ImVec2(size_max)); + } + })); + // IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() + emscripten::function("SetNextWindowContentSize", FUNCTION(void, (emscripten::val size), { + ImGui::SetNextWindowContentSize(import_ImVec2(size)); + })); + // IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() + emscripten::function("SetNextWindowCollapsed", &ImGui::SetNextWindowCollapsed); + // IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() + emscripten::function("SetNextWindowFocus", &ImGui::SetNextWindowFocus); + // IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + emscripten::function("SetWindowPos", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + emscripten::function("SetWindowSize", FUNCTION(void, (emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowSize(import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + emscripten::function("SetWindowCollapsed", FUNCTION(void, (bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). + emscripten::function("SetWindowFocus", FUNCTION(void, (), { + ImGui::SetWindowFocus(); + })); + // IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. + emscripten::function("SetWindowNamePos", FUNCTION(void, (std::string name, emscripten::val pos, ImGuiCond cond), { + ImGui::SetWindowPos(name.c_str(), import_ImVec2(pos), cond); + })); + // IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. + emscripten::function("SetWindowNameSize", FUNCTION(void, (std::string name, emscripten::val size, ImGuiCond cond), { + ImGui::SetWindowSize(name.c_str(), import_ImVec2(size), cond); + })); + // IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state + emscripten::function("SetWindowNameCollapsed", FUNCTION(void, (std::string name, bool collapsed, ImGuiCond cond), { + ImGui::SetWindowCollapsed(name.c_str(), collapsed, cond); + })); + // IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. + emscripten::function("SetWindowNameFocus", FUNCTION(void, (std::string name), { + ImGui::SetWindowFocus(name.c_str()); + })); + + // IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] + emscripten::function("GetScrollX", &ImGui::GetScrollX); + // IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] + emscripten::function("GetScrollY", &ImGui::GetScrollY); + // IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X + emscripten::function("GetScrollMaxX", &ImGui::GetScrollMaxX); + // IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y + emscripten::function("GetScrollMaxY", &ImGui::GetScrollMaxY); + // IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] + emscripten::function("SetScrollX", &ImGui::SetScrollX); + // IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] + emscripten::function("SetScrollY", &ImGui::SetScrollY); + // IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. + emscripten::function("SetScrollHere", &ImGui::SetScrollHere); + // IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. + emscripten::function("SetScrollFromPosY", &ImGui::SetScrollFromPosY); + // IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) + emscripten::function("SetStateStorage", FUNCTION(void, (emscripten::val tree), { + TODO(); + })); + // IMGUI_API ImGuiStorage* GetStateStorage(); + emscripten::function("GetStateStorage", FUNCTION(emscripten::val, (), { + TODO(); + return emscripten::val::null(); + })); + + // Parameters stacks (shared) + // IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font + emscripten::function("PushFont", FUNCTION(void, (emscripten::val font), { + TODO(); + // ImGui::PushFont(font); + })); + // IMGUI_API void PopFont(); + emscripten::function("PopFont", FUNCTION(void, (), { + TODO(); + // ImGui::PopFont(); + })); + // IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); + // IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); + emscripten::function("PushStyleColor", FUNCTION(void, (ImGuiCol idx, emscripten::val col), { + if (col.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, col.as()); + } else { + ImGui::PushStyleColor(idx, import_ImVec4(col)); + } + })); + // IMGUI_API void PopStyleColor(int count = 1); + emscripten::function("PopStyleColor", &ImGui::PopStyleColor); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float emscripten::val); + // IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& emscripten::val); + emscripten::function("PushStyleVar", FUNCTION(void, (ImGuiStyleVar idx, emscripten::val var), { + if (var.typeOf().as() == "number") { + ImGui::PushStyleVar(idx, var.as()); + } else { + ImGui::PushStyleVar(idx, import_ImVec2(var)); + } + })); + // IMGUI_API void PopStyleVar(int count = 1); + emscripten::function("PopStyleVar", &ImGui::PopStyleVar); + // IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. + emscripten::function("GetStyleColorVec4", FUNCTION(emscripten::val, (ImGuiCol idx), { + const ImVec4* p = &ImGui::GetStyleColorVec4(idx); return emscripten::val(p); + })); + // IMGUI_API ImFont* GetFont(); // get current font + emscripten::function("GetFont", FUNCTION(emscripten::val, (), { + ImFont* p = ImGui::GetFont(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied + emscripten::function("GetFontSize", &ImGui::GetFontSize); + // IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API + emscripten::function("GetFontTexUvWhitePixel", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetFontTexUvWhitePixel(), out); + })); + // IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier + // IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied + // IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied + emscripten::function("GetColorU32", FUNCTION(ImU32, (emscripten::val color, emscripten::val alpha_mul), { + return ImGui::GetColorU32(color.as(), alpha_mul.as()); + })); + + // Parameters stacks (current window) + // IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) + emscripten::function("PushItemWidth", &ImGui::PushItemWidth); + // IMGUI_API void PopItemWidth(); + emscripten::function("PopItemWidth", &ImGui::PopItemWidth); + // IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position + emscripten::function("CalcItemWidth", &ImGui::CalcItemWidth); + // IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space + emscripten::function("PushTextWrapPos", &ImGui::PushTextWrapPos); + // IMGUI_API void PopTextWrapPos(); + emscripten::function("PopTextWrapPos", &ImGui::PopTextWrapPos); + // IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets + emscripten::function("PushAllowKeyboardFocus", &ImGui::PushAllowKeyboardFocus); + // IMGUI_API void PopAllowKeyboardFocus(); + emscripten::function("PopAllowKeyboardFocus", &ImGui::PopAllowKeyboardFocus); + // IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. + emscripten::function("PushButtonRepeat", &ImGui::PushButtonRepeat); + // IMGUI_API void PopButtonRepeat(); + emscripten::function("PopButtonRepeat", &ImGui::PopButtonRepeat); + + // Cursor / Layout + // IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. + emscripten::function("Separator", &ImGui::Separator); + // IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally + emscripten::function("SameLine", &ImGui::SameLine); + // IMGUI_API void NewLine(); // undo a SameLine() + emscripten::function("NewLine", &ImGui::NewLine); + // IMGUI_API void Spacing(); // add vertical spacing + emscripten::function("Spacing", &ImGui::Spacing); + // IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size + emscripten::function("Dummy", FUNCTION(void, (emscripten::val size), { + ImGui::Dummy(import_ImVec2(size)); + })); + // IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Indent", &ImGui::Indent); + // IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 + emscripten::function("Unindent", &ImGui::Unindent); + // IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) + emscripten::function("BeginGroup", &ImGui::BeginGroup); + // IMGUI_API void EndGroup(); + emscripten::function("EndGroup", &ImGui::EndGroup); + // IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position + emscripten::function("GetCursorPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorPos(), out); + })); + // IMGUI_API float GetCursorPosX(); // " + emscripten::function("GetCursorPosX", &ImGui::GetCursorPosX); + // IMGUI_API float GetCursorPosY(); // " + emscripten::function("GetCursorPosY", &ImGui::GetCursorPosY); + // IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " + emscripten::function("SetCursorPos", &ImGui::SetCursorPos); + // IMGUI_API void SetCursorPosX(float x); // " + emscripten::function("SetCursorPosX", &ImGui::SetCursorPosX); + // IMGUI_API void SetCursorPosY(float y); // " + emscripten::function("SetCursorPosY", &ImGui::SetCursorPosY); + // IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position + emscripten::function("GetCursorStartPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorStartPos(), out); + })); + // IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) + emscripten::function("GetCursorScreenPos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetCursorScreenPos(), out); + })); + // IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] + emscripten::function("SetCursorScreenPos", &ImGui::SetCursorScreenPos); + // IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) + emscripten::function("AlignTextToFramePadding", &ImGui::AlignTextToFramePadding); + // IMGUI_API float GetTextLineHeight(); // ~ FontSize + emscripten::function("GetTextLineHeight", &ImGui::GetTextLineHeight); + // IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) + emscripten::function("GetTextLineHeightWithSpacing", &ImGui::GetTextLineHeightWithSpacing); + // IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 + emscripten::function("GetFrameHeight", &ImGui::GetFrameHeight); + // IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) + emscripten::function("GetFrameHeightWithSpacing", &ImGui::GetFrameHeightWithSpacing); + + // Columns + // You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. + // IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); + emscripten::function("Columns", FUNCTION(void, (int count, emscripten::val id, bool border), { + if (id.isNull()) { + ImGui::Columns(count, NULL, border); + } else { + ImGui::Columns(count, id.as().c_str(), border); + } + })); + // IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished + emscripten::function("NextColumn", &ImGui::NextColumn); + // IMGUI_API int GetColumnIndex(); // get current column index + emscripten::function("GetColumnIndex", &ImGui::GetColumnIndex); + // IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column + emscripten::function("GetColumnWidth", &ImGui::GetColumnWidth); + // IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column + emscripten::function("SetColumnWidth", &ImGui::SetColumnWidth); + // IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f + emscripten::function("GetColumnOffset", &ImGui::GetColumnOffset); + // IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column + emscripten::function("SetColumnOffset", &ImGui::SetColumnOffset); + // IMGUI_API int GetColumnsCount(); + emscripten::function("GetColumnsCount", &ImGui::GetColumnsCount); + + // ID scopes + // If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. + // You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. + // IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! + // IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API void PushID(const void* ptr_id); + // IMGUI_API void PushID(int int_id); + emscripten::function("PushID", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::PushID(id.as()); + } else { + return ImGui::PushID(id.as().c_str()); + } + })); + // IMGUI_API void PopID(); + emscripten::function("PopID", &ImGui::PopID); + // IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself + // IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); + // IMGUI_API ImGuiID GetID(const void* ptr_id); + emscripten::function("GetID", FUNCTION(ImGuiID, (emscripten::val id), { + if (id.typeOf().as() == "number") { + return ImGui::GetID((const void*) id.as()); + } else { + return ImGui::GetID(id.as().c_str()); + } + })); + + // Widgets: Text + // IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. + emscripten::function("TextUnformatted", FUNCTION(void, (std::string text), { ImGui::TextUnformatted(text.c_str()); })); + // IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text + emscripten::function("Text", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextV", FUNCTION(void, (std::string fmt), { ImGui::Text("%s", fmt.c_str()); })); + // IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextColored", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TextColoredV", FUNCTION(void, (emscripten::val col, std::string fmt), { ImGui::TextColored(import_ImVec4(col), "%s", fmt.c_str()); })); + // IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); + emscripten::function("TextDisabled", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextDisabledV", FUNCTION(void, (std::string fmt), { ImGui::TextDisabled("%s", fmt.c_str()); })); + // IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). + emscripten::function("TextWrapped", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("TextWrappedV", FUNCTION(void, (std::string fmt), { ImGui::TextWrapped("%s", fmt.c_str()); })); + // IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets + emscripten::function("LabelText", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("LabelTextV", FUNCTION(void, (std::string label, std::string fmt), { ImGui::LabelText(label.c_str(), "%s", fmt.c_str()); })); + // IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() + emscripten::function("BulletText", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("BulletTextV", FUNCTION(void, (std::string fmt), { ImGui::BulletText("%s", fmt.c_str()); })); + // IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + emscripten::function("Bullet", &ImGui::Bullet); + + // Widgets: Main + // IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button + emscripten::function("Button", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::Button(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text + emscripten::function("SmallButton", FUNCTION(bool, (std::string label), { return ImGui::SmallButton(label.c_str()); })); + // IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) + emscripten::function("InvisibleButton", FUNCTION(bool, (std::string str_id, emscripten::val size), { return ImGui::InvisibleButton(str_id.c_str(), import_ImVec2(size)); })); + // IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); + emscripten::function("Image", FUNCTION(void, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, emscripten::val tint_col, emscripten::val border_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + ImGui::Image(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), import_ImVec4(tint_col), import_ImVec4(border_col)); + })); + // IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding + emscripten::function("ImageButton", FUNCTION(bool, (emscripten::val user_texture_id, emscripten::val size, emscripten::val uv0, emscripten::val uv1, int frame_padding, emscripten::val bg_col, emscripten::val tint_col), { + ImTextureID _user_texture_id = ImGui::GetIO().Fonts->TexID; // TODO: texture + return ImGui::ImageButton(_user_texture_id, import_ImVec2(size), import_ImVec2(uv0), import_ImVec2(uv1), frame_padding, import_ImVec4(bg_col), import_ImVec4(tint_col)); + })); + // IMGUI_API bool Checkbox(const char* label, bool* v); + emscripten::function("Checkbox", FUNCTION(bool, (std::string label, emscripten::val v), { + bool _v = v[0].as(); + bool ret = ImGui::Checkbox(label.c_str(), &_v); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); + emscripten::function("CheckboxFlags", FUNCTION(bool, (std::string label, emscripten::val flags, unsigned int flags_value), { + unsigned int _flags = flags[0].as(); + bool ret = ImGui::CheckboxFlags(label.c_str(), &_flags, flags_value); + flags.set(0, emscripten::val(_flags)); + return ret; + })); + // IMGUI_API bool RadioButton(const char* label, bool active); + // IMGUI_API bool RadioButton(const char* label, int* v, int v_button); + emscripten::function("RadioButton", FUNCTION(bool, (std::string label, emscripten::val active_or_v, emscripten::val v_button), { + if (v_button.isUndefined()) { + return ImGui::RadioButton(label.c_str(), active_or_v.as()); + } else { + int _v = active_or_v[0].as(); + bool ret = ImGui::RadioButton(label.c_str(), &_v, v_button.as()); + active_or_v.set(0, emscripten::val(_v)); + return ret; + } + })); + // IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotLines", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotLines_values_getter = values_getter; + /*static emscripten::val*/ _PlotLines_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotLines(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotLines_values_getter(_PlotLines_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + // ImGui::PlotLines(label.c_str(), emscripten::select_overload([] (void* data, int idx) -> float { + // return 0.0f; + // }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + + + })); + // IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); + // IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); + emscripten::function("PlotHistogram", FUNCTION(void, (std::string label, emscripten::val values_getter, emscripten::val data, int values_count, int values_offset, emscripten::val overlay_text, emscripten::val scale_min, emscripten::val scale_max, emscripten::val graph_size), { + /*static emscripten::val*/ _PlotHistogram_values_getter = values_getter; + /*static emscripten::val*/ _PlotHistogram_data = data; + const char* _overlay_text = overlay_text.isNull() ? NULL : overlay_text.as().c_str(); + float _scale_min = scale_min.isNull() ? FLT_MAX : scale_min.as(); + float _scale_max = scale_max.isNull() ? FLT_MAX : scale_max.as(); + ImGui::PlotHistogram(label.c_str(), FUNCTION(float, (void* data, int idx), { + return _PlotHistogram_values_getter(_PlotHistogram_data, emscripten::val(idx)).as(); + }), NULL, values_count, values_offset, _overlay_text, _scale_min, _scale_max, import_ImVec2(graph_size)); + })); + // IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); + emscripten::function("ProgressBar", FUNCTION(void, (float fraction, emscripten::val size_arg, emscripten::val overlay), { + if (overlay.isNull()) { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), NULL); + } else { + ImGui::ProgressBar(fraction, import_ImVec2(size_arg), overlay.as().c_str()); + } + })); + + // Widgets: Combo Box + // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. + // The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. + // IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); + emscripten::function("BeginCombo", FUNCTION(bool, (std::string label, emscripten::val preview_value, ImGuiComboFlags flags), { + return ImGui::BeginCombo(label.c_str(), preview_value.isNull() ? NULL : preview_value.as().c_str(), flags); + })); + // IMGUI_API void EndCombo(); + emscripten::function("EndCombo", &ImGui::EndCombo); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); + // IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" + // IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); + emscripten::function("Combo", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int popup_max_height_in_items), { + static emscripten::val _items = items; + int _current_item = current_item[0].as(); + bool ret = ImGui::Combo(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + static std::string text = _items[idx].as(); + *out_text = text.c_str(); + return true; + }), NULL, items_count, popup_max_height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + + // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) + // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x + // IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound + emscripten::function("DragFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, emscripten::val display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::DragFloat(label.c_str(), &_v, v_speed, v_min, v_max, display_format.isNull() ? NULL : display_format.as().c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[2] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragFloat2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[3] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragFloat3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("DragFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, float v_min, float v_max, std::string display_format, float power), { + float _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragFloat4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); + emscripten::function("DragFloatRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max, float power), { + float _v_current_min = v_current_min[0].as(); + float _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragFloatRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str(), power); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + // IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound + emscripten::function("DragInt", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::DragInt(label.c_str(), &_v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt2", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::DragInt2(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt3", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::DragInt3(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); + emscripten::function("DragInt4", FUNCTION(bool, (std::string label, emscripten::val v, float v_speed, int v_min, int v_max, std::string display_format), { + int _v[4] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::DragInt4(label.c_str(), _v, v_speed, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); + emscripten::function("DragIntRange2", FUNCTION(bool, (std::string label, emscripten::val v_current_min, emscripten::val v_current_max, float v_speed, float v_min, float v_max, std::string display_format, emscripten::val display_format_max), { + int _v_current_min = v_current_min[0].as(); + int _v_current_max = v_current_max[0].as(); + std::string _display_format_max = display_format_max.isNull() ? NULL : display_format_max.as(); + bool ret = ImGui::DragIntRange2(label.c_str(), &_v_current_min, &_v_current_max, v_speed, v_min, v_max, display_format.c_str(), _display_format_max.c_str()); + v_current_min.set(0, emscripten::val(_v_current_min)); + v_current_max.set(0, emscripten::val(_v_current_max)); + return ret; + })); + + // Widgets: Input with Keyboard + // IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputText", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputText(label.c_str(), (char*) _buf.data(), buf_size, flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + }), emscripten::allow_raw_pointers()); + // IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); + emscripten::function("InputTextMultiline", FUNCTION(bool, (std::string label, emscripten::val buf, size_t buf_size, emscripten::val size, ImGuiInputTextFlags flags, emscripten::val callback, emscripten::val user_data), { + std::string _buf = buf[0].as(); + _buf.reserve(buf_size); + bool ret = false; + if (!callback.isNull()) { + static emscripten::val _callback = callback; + static emscripten::val _user_data = user_data; + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags, FUNCTION(int, (ImGuiTextEditCallbackData* data), { + emscripten::val _data = emscripten::val(data); + _data.set("UserData", _user_data); + return _callback(_data).as(); + }), NULL); + } else { + ret = ImGui::InputTextMultiline(label.c_str(), (char*) _buf.data(), buf_size, import_ImVec2(size), flags); + } + buf.set(0, emscripten::val(_buf.c_str())); + return ret; + })); + // IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat", FUNCTION(bool, (std::string label, emscripten::val v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v = v[0].as(); + bool ret = ImGui::InputFloat(label.c_str(), &_v, step, step_fast, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat2", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputFloat2(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat3", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputFloat3(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputFloat4", FUNCTION(bool, (std::string label, emscripten::val v, int decimal_precision, ImGuiInputTextFlags extra_flags), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputFloat4(label.c_str(), _v, decimal_precision, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt", FUNCTION(bool, (std::string label, emscripten::val v, int step, int step_fast, ImGuiInputTextFlags extra_flags), { + int _v = v[0].as(); + bool ret = ImGui::InputInt(label.c_str(), &_v, step, step_fast, extra_flags); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt2", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::InputInt2(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt3", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::InputInt3(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); + emscripten::function("InputInt4", FUNCTION(bool, (std::string label, emscripten::val v, ImGuiInputTextFlags extra_flags), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::InputInt4(label.c_str(), _v, extra_flags); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + + // Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) + // IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders + emscripten::function("SliderFloat", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::SliderFloat(label.c_str(), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat2", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderFloat2(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat3", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderFloat3(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("SliderFloat4", FUNCTION(bool, (std::string label, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderFloat4(label.c_str(), _v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); + emscripten::function("SliderAngle", FUNCTION(bool, (std::string label, emscripten::val v_rad, float v_degrees_min, float v_degrees_max), { + float _v_rad = v_rad[0].as(); + bool ret = ImGui::SliderAngle(label.c_str(), &_v_rad, v_degrees_min, v_degrees_max); + v_rad.set(0, emscripten::val(_v_rad)); + return ret; + })); + // IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::SliderInt(label.c_str(), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt2", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as() }; + bool ret = ImGui::SliderInt2(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + return ret; + })); + // IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt3", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as() }; + bool ret = ImGui::SliderInt3(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + return ret; + })); + // IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("SliderInt4", FUNCTION(bool, (std::string label, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v[] = { v[0].as(), v[1].as(), v[2].as(), v[3].as() }; + bool ret = ImGui::SliderInt4(label.c_str(), _v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v[0])); + v.set(1, emscripten::val(_v[1])); + v.set(2, emscripten::val(_v[2])); + v.set(3, emscripten::val(_v[3])); + return ret; + })); + // IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); + emscripten::function("VSliderFloat", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, float v_min, float v_max, std::string display_format, float power), { + float _v = v[0].as(); + bool ret = ImGui::VSliderFloat(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str(), power); + v.set(0, emscripten::val(_v)); + return ret; + })); + // IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); + emscripten::function("VSliderInt", FUNCTION(bool, (std::string label, emscripten::val size, emscripten::val v, int v_min, int v_max, std::string display_format), { + int _v = v[0].as(); + bool ret = ImGui::VSliderInt(label.c_str(), import_ImVec2(size), &_v, v_min, v_max, display_format.c_str()); + v.set(0, emscripten::val(_v)); + return ret; + })); + + // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) + // Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x + // IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorEdit3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorEdit4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorEdit4(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); + emscripten::function("ColorPicker3", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags), { + float _col[3] = { 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + bool ret = ImGui::ColorPicker3(label.c_str(), _col, flags); + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + return ret; + })); + // IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); + emscripten::function("ColorPicker4", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val ref_col), { + float _col[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + _col[0] = col[0].as(); + _col[1] = col[1].as(); + _col[2] = col[2].as(); + _col[3] = col[3].as(); + bool ret = ImGui::ColorPicker4(label.c_str(), _col, flags); // TODO: ref_col + col.set(0, emscripten::val(_col[0])); + col.set(1, emscripten::val(_col[1])); + col.set(2, emscripten::val(_col[2])); + col.set(3, emscripten::val(_col[3])); + return ret; + })); + // IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. + emscripten::function("ColorButton", FUNCTION(bool, (std::string label, emscripten::val col, ImGuiColorEditFlags flags, emscripten::val size), { + return ImGui::ColorButton(label.c_str(), import_ImVec4(col), flags, import_ImVec2(size)); + })); + // IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. + emscripten::function("SetColorEditOptions", &ImGui::SetColorEditOptions); + + // Widgets: Trees + // IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). + // IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). + // IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " + // IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); + // IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); + emscripten::function("TreeNode", FUNCTION(bool, (emscripten::val label_or_id, std::string fmt), { + // return ImGui::TreeNode(label.c_str(), "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNode(label_or_id.as().c_str(), "%s", fmt.c_str()); + } else { + return ImGui::TreeNode((const void*) label_or_id.as(), "%s", fmt.c_str()); + } + })); + // IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); + // IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); + // IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + // IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); + emscripten::function("TreeNodeEx", FUNCTION(bool, (emscripten::val label_or_id, ImGuiTreeNodeFlags flags, std::string fmt), { + // return ImGui::TreeNodeEx(label.c_str(), flags, "%s", fmt.c_str()); + if (label_or_id.typeOf().equals(emscripten::val("string"))) { + return ImGui::TreeNodeEx(label_or_id.as().c_str(), flags, "%s", fmt.c_str()); + } else { + return ImGui::TreeNodeEx((const void*) label_or_id.as(), flags, "%s", fmt.c_str()); + } + })); + // IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose + // IMGUI_API void TreePush(const void* ptr_id = NULL); // " + emscripten::function("TreePush", FUNCTION(void, (emscripten::val id), { + if (id.typeOf().equals(emscripten::val("string"))) { + ImGui::TreePush(id.as().c_str()); + } else { + ImGui::TreePush((const void*) id.as()); + } + })); + // IMGUI_API void TreePop(); // ~ Unindent()+PopId() + emscripten::function("TreePop", &ImGui::TreePop); + // IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + emscripten::function("TreeAdvanceToLabelPos", &ImGui::TreeAdvanceToLabelPos); + // IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode + emscripten::function("GetTreeNodeToLabelSpacing", &ImGui::GetTreeNodeToLabelSpacing); + // IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. + emscripten::function("SetNextTreeNodeOpen", &ImGui::SetNextTreeNodeOpen); + // IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). + // IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header + emscripten::function("CollapsingHeader", FUNCTION(bool, (std::string label, emscripten::val p_open, int flags), { + if (p_open.isNull()) { + return ImGui::CollapsingHeader(label.c_str(), flags); + } else { + bool _p_open = p_open[0].as(); + bool ret = ImGui::CollapsingHeader(label.c_str(), &_p_open, flags); + p_open.set(0, emscripten::val(_p_open)); + return ret; + } + })); + + // Widgets: Selectable / Lists + // IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height + // IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); + emscripten::function("Selectable", FUNCTION(bool, (std::string label, emscripten::val p_selected, ImGuiSelectableFlags flags, emscripten::val size), { + if (p_selected.typeOf().equals(emscripten::val("boolean"))) { + return ImGui::Selectable(label.c_str(), p_selected.as(), flags, import_ImVec2(size)); + } else { + bool selected = p_selected[0].as(); + bool ret = ImGui::Selectable(label.c_str(), &selected, flags, import_ImVec2(size)); + p_selected.set(0, emscripten::val(selected)); + return ret; + } + })); + // IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); + // IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); + emscripten::function("ListBox", FUNCTION(bool, (std::string label, emscripten::val current_item, emscripten::val items, int items_count, int height_in_items), { + static emscripten::val _items = items; + static int _items_count = items_count; + static std::string _list_box_item; + int _current_item = current_item[0].as(); + bool ret = ImGui::ListBox(label.c_str(), &_current_item, FUNCTION(bool, (void* data, int idx, const char** out_text), { + if (0 <= idx && idx <= _items_count) { + _list_box_item = _items[idx].as(); + *out_text = _list_box_item.c_str(); + return true; + } else { + return false; + } + }), NULL, items_count, height_in_items); + current_item.set(0, emscripten::val(_current_item)); + return ret; + })); + // IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. + // IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " + emscripten::function("ListBoxHeader", FUNCTION(bool, (std::string label, emscripten::val size), { + return ImGui::ListBoxHeader(label.c_str(), import_ImVec2(size)); + })); + // IMGUI_API void ListBoxFooter(); // terminate the scrolling region + emscripten::function("ListBoxFooter", &ImGui::ListBoxFooter); + + // Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) + // IMGUI_API void Value(const char* prefix, bool b); + // IMGUI_API void Value(const char* prefix, int v); + // IMGUI_API void Value(const char* prefix, unsigned int v); + // IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); + emscripten::function("Value", FUNCTION(void, (std::string prefix, emscripten::val value), { + if (value.typeOf().equals(emscripten::val("boolean"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else if (value.typeOf().equals(emscripten::val("number"))) { + ImGui::Value(prefix.c_str(), value.as()); + } else { + ImGui::LabelText(prefix.c_str(), "%s", value.as().c_str()); + } + })); + + // Tooltips + // IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). + // IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); + emscripten::function("SetTooltip", FUNCTION(void, (std::string fmt), { + ImGui::SetTooltip("%s", fmt.c_str()); + })); + // IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). + emscripten::function("BeginTooltip", &ImGui::BeginTooltip); + // IMGUI_API void EndTooltip(); + emscripten::function("EndTooltip", &ImGui::EndTooltip); + + // Menus + // IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! + emscripten::function("BeginMainMenuBar", &ImGui::BeginMainMenuBar); + // IMGUI_API void EndMainMenuBar(); + emscripten::function("EndMainMenuBar", &ImGui::EndMainMenuBar); + // IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! + emscripten::function("BeginMenuBar", &ImGui::BeginMenuBar); + // IMGUI_API void EndMenuBar(); + emscripten::function("EndMenuBar", &ImGui::EndMenuBar); + // IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! + emscripten::function("BeginMenu", FUNCTION(bool, (std::string label, bool enabled), { + return ImGui::BeginMenu(label.c_str(), enabled); + })); + // IMGUI_API void EndMenu(); + emscripten::function("EndMenu", &ImGui::EndMenu); + // IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment + // IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL + emscripten::function("MenuItem", FUNCTION(bool, (std::string label, std::string shortcut, emscripten::val selected, bool enabled), { + bool _selected = selected[0].as(); + bool ret = ImGui::MenuItem(label.c_str(), shortcut.c_str(), &_selected, enabled); + selected.set(0, emscripten::val(_selected)); + return ret; + })); + + // Popups + // IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). + emscripten::function("OpenPopup", FUNCTION(void, (std::string str_id), { ImGui::OpenPopup(str_id.c_str()); })); + // IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. + emscripten::function("OpenPopupOnItemClick", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::OpenPopupOnItemClick(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! + emscripten::function("BeginPopup", FUNCTION(bool, (std::string str_id), { return ImGui::BeginPopup(str_id.c_str()); })); + // IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) + emscripten::function("BeginPopupModal", FUNCTION(bool, (std::string name, emscripten::val p_open, ImGuiWindowFlags extra_flags), { + bool open = p_open[0].as(); + bool ret = ImGui::BeginPopupModal(name.c_str(), &open, extra_flags); + p_open.set(0, emscripten::val(open)); + return ret; + })); + // IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! + emscripten::function("BeginPopupContextItem", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextItem(str_id.c_str(), mouse_button); })); + // IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. + emscripten::function("BeginPopupContextWindow", FUNCTION(bool, (std::string str_id, int mouse_button, bool also_over_items), { return ImGui::BeginPopupContextWindow(str_id.c_str(), mouse_button, also_over_items); })); + // IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). + emscripten::function("BeginPopupContextVoid", FUNCTION(bool, (std::string str_id, int mouse_button), { return ImGui::BeginPopupContextVoid(str_id.c_str(), mouse_button); })); + // IMGUI_API void EndPopup(); + emscripten::function("EndPopup", &ImGui::EndPopup); + // IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open + emscripten::function("IsPopupOpen", FUNCTION(bool, (std::string str_id), { return ImGui::IsPopupOpen(str_id.c_str()); })); + // IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. + emscripten::function("CloseCurrentPopup", &ImGui::CloseCurrentPopup); + + // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. + // IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty + emscripten::function("LogToTTY", &ImGui::LogToTTY); + // IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file + emscripten::function("LogToFile", FUNCTION(void, (int max_depth, emscripten::val filename), { + ImGui::LogToFile(max_depth, filename.isNull() ? NULL : filename.as().c_str()); + })); + // IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard + emscripten::function("LogToClipboard", &ImGui::LogToClipboard); + // IMGUI_API void LogFinish(); // stop logging (close file, etc.) + emscripten::function("LogFinish", &ImGui::LogFinish); + // IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard + emscripten::function("LogButtons", &ImGui::LogButtons); + // IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) + emscripten::function("LogText", FUNCTION(void, (std::string fmt), { + ImGui::LogText("%s", fmt.c_str()); + })); + + // Drag and Drop + // [BETA API] Missing Demo code. API may evolve. + // IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() + emscripten::function("BeginDragDropSource", &ImGui::BeginDragDropSource); + // IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. + emscripten::function("SetDragDropPayload", FUNCTION(bool, (std::string type, emscripten::val data, size_t size, ImGuiCond cond), { + TODO(); + return false; + })); + // IMGUI_API void EndDragDropSource(); + emscripten::function("EndDragDropSource", &ImGui::EndDragDropSource); + // IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() + emscripten::function("BeginDragDropTarget", &ImGui::BeginDragDropTarget); + // IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. + emscripten::function("AcceptDragDropPayload", FUNCTION(emscripten::val, (std::string type, ImGuiDragDropFlags flags), { + TODO(); + return emscripten::val::null(); + })); + // IMGUI_API void EndDragDropTarget(); + emscripten::function("EndDragDropTarget", &ImGui::EndDragDropTarget); + + // Clipping + // IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); + emscripten::function("PushClipRect", FUNCTION(void, (emscripten::val clip_rect_min, emscripten::val clip_rect_max, bool intersect_with_current_clip_rect), { + return ImGui::PushClipRect(import_ImVec2(clip_rect_min), import_ImVec2(clip_rect_max), intersect_with_current_clip_rect); + })); + // IMGUI_API void PopClipRect(); + emscripten::function("PopClipRect", &ImGui::PopClipRect); + + // Styles + // IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsClassic", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsClassic(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsDark", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsDark(dst); }), emscripten::allow_raw_pointers()); + // IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); + emscripten::function("StyleColorsLight", FUNCTION(void, (ImGuiStyle* dst), { ImGui::StyleColorsLight(dst); }), emscripten::allow_raw_pointers()); + + // Focus + // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) + // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) + // IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). + emscripten::function("SetItemDefaultFocus", &ImGui::SetItemDefaultFocus); + // IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. + emscripten::function("SetKeyboardFocusHere", &ImGui::SetKeyboardFocusHere); + + // Utilities + // IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. + emscripten::function("IsItemHovered", &ImGui::IsItemHovered); + // IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) + emscripten::function("IsItemActive", &ImGui::IsItemActive); + // IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) + emscripten::function("IsItemClicked", &ImGui::IsItemClicked); + // IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) + emscripten::function("IsItemVisible", &ImGui::IsItemVisible); + // IMGUI_API bool IsAnyItemHovered(); + emscripten::function("IsAnyItemHovered", &ImGui::IsAnyItemHovered); + // IMGUI_API bool IsAnyItemActive(); + emscripten::function("IsAnyItemActive", &ImGui::IsAnyItemActive); + // IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space + emscripten::function("GetItemRectMin", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMin(), out); + })); + // IMGUI_API ImVec2 GetItemRectMax(); // " + emscripten::function("GetItemRectMax", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectMax(), out); + })); + // IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space + emscripten::function("GetItemRectSize", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetItemRectSize(), out); + })); + // IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. + emscripten::function("SetItemAllowOverlap", &ImGui::SetItemAllowOverlap); + // IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. + emscripten::function("IsWindowFocused", &ImGui::IsWindowFocused); + // IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. + emscripten::function("IsWindowHovered", &ImGui::IsWindowHovered); + // IMGUI_API bool IsAnyWindowFocused(); + emscripten::function("IsAnyWindowFocused", &ImGui::IsAnyWindowFocused); + // IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window + emscripten::function("IsAnyWindowHovered", &ImGui::IsAnyWindowHovered); + // IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. + // IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. + emscripten::function("IsRectVisible", FUNCTION(bool, (emscripten::val size_or_rect_min, emscripten::val rect_max), { + if (rect_max.isUndefined()) { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min)); + } else { + return ImGui::IsRectVisible(import_ImVec2(size_or_rect_min), import_ImVec2(rect_max)); + } + })); + // IMGUI_API float GetTime(); + emscripten::function("GetTime", &ImGui::GetTime); + // IMGUI_API int GetFrameCount(); + emscripten::function("GetFrameCount", &ImGui::GetFrameCount); + // IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text + emscripten::function("GetOverlayDrawList", FUNCTION(emscripten::val, (), { + ImDrawList* p = ImGui::GetOverlayDrawList(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); + emscripten::function("GetDrawListSharedData", FUNCTION(emscripten::val, (), { + ImDrawListSharedData* p = ImGui::GetDrawListSharedData(); return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API const char* GetStyleColorName(ImGuiCol idx); + emscripten::function("GetStyleColorName", FUNCTION(std::string, (ImGuiCol idx), { return std::string(ImGui::GetStyleColorName(idx)); })); + // IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items + emscripten::function("CalcItemRectClosestPoint", FUNCTION(emscripten::val, (emscripten::val pos, bool on_edge, float outward, emscripten::val out), { + return export_ImVec2(ImGui::CalcItemRectClosestPoint(import_ImVec2(pos), on_edge, outward), out); + })); + // IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); + emscripten::function("CalcTextSize", FUNCTION(emscripten::val, (std::string text, emscripten::val text_end, bool hide_text_after_double_hash, float wrap_width, emscripten::val out), { + return export_ImVec2(ImGui::CalcTextSize(text.c_str(), NULL, hide_text_after_double_hash, wrap_width), out); // TODO: text_end + })); + // IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. + emscripten::function("CalcListClipping", FUNCTION(void, (int items_count, float items_height, emscripten::val out_items_display_start, emscripten::val out_items_display_end), { + int _out_items_display_start = -1; + int _out_items_display_end = -1; + ImGui::CalcListClipping(items_count, items_height, &_out_items_display_start, &_out_items_display_end); + out_items_display_start.set(0, emscripten::val(_out_items_display_start)); + out_items_display_end.set(0, emscripten::val(_out_items_display_end)); + })); + + // IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame + emscripten::function("BeginChildFrame", &ImGui::BeginChildFrame); + // IMGUI_API void EndChildFrame(); + emscripten::function("EndChildFrame", &ImGui::EndChildFrame); + + // IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); + emscripten::function("ColorConvertU32ToFloat4", FUNCTION(emscripten::val, (ImU32 in, emscripten::val out), { + return export_ImVec4(ImGui::ColorConvertU32ToFloat4(in), out); + })); + // IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); + emscripten::function("ColorConvertFloat4ToU32", &ImGui::ColorConvertFloat4ToU32); + // IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); + emscripten::function("ColorConvertRGBtoHSV", FUNCTION(void, (float r, float g, float b, emscripten::val out_h, emscripten::val out_s, emscripten::val out_v), { + float h, s, v; + ImGui::ColorConvertRGBtoHSV(r, g, b, h, s, v); + out_h.set(0, emscripten::val(h)); + out_s.set(0, emscripten::val(s)); + out_v.set(0, emscripten::val(v)); + })); + // IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); + emscripten::function("ColorConvertHSVtoRGB", FUNCTION(void, (float h, float s, float v, emscripten::val out_r, emscripten::val out_g, emscripten::val out_b), { + float r, g, b; + ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); + out_r.set(0, emscripten::val(r)); + out_g.set(0, emscripten::val(g)); + out_b.set(0, emscripten::val(b)); + })); + + // Inputs + // IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] + emscripten::function("GetKeyIndex", &ImGui::GetKeyIndex); + // IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! + emscripten::function("IsKeyDown", &ImGui::IsKeyDown); + // IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate + emscripten::function("IsKeyPressed", &ImGui::IsKeyPressed); + // IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. + emscripten::function("IsKeyReleased", &ImGui::IsKeyReleased); + // IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate + emscripten::function("GetKeyPressedAmount", &ImGui::GetKeyPressedAmount); + // IMGUI_API bool IsMouseDown(int button); // is mouse button held + emscripten::function("IsMouseDown", &ImGui::IsMouseDown); + // IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) + emscripten::function("IsMouseClicked", &ImGui::IsMouseClicked); + // IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. + emscripten::function("IsMouseDoubleClicked", &ImGui::IsMouseDoubleClicked); + // IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) + emscripten::function("IsMouseReleased", &ImGui::IsMouseReleased); + // IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("IsMouseDragging", &ImGui::IsMouseDragging); + // IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. + emscripten::function("IsMouseHoveringRect", FUNCTION(bool, (emscripten::val r_min, emscripten::val r_max, bool clip), { + return ImGui::IsMouseHoveringRect(import_ImVec2(r_min), import_ImVec2(r_max), clip); + })); + // IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // + emscripten::function("IsMousePosValid", FUNCTION(bool, (emscripten::val mouse_pos), { + if (mouse_pos.isNull()) { + return ImGui::IsMousePosValid(); + } else { + ImVec2 _mouse_pos = import_ImVec2(mouse_pos); + return ImGui::IsMousePosValid(&_mouse_pos); + } + })); + // IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls + emscripten::function("GetMousePos", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePos(), out); + })); + // IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into + emscripten::function("GetMousePosOnOpeningCurrentPopup", FUNCTION(emscripten::val, (emscripten::val out), { + return export_ImVec2(ImGui::GetMousePosOnOpeningCurrentPopup(), out); + })); + // IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold + emscripten::function("GetMouseDragDelta", FUNCTION(emscripten::val, (int button, float lock_threshold, emscripten::val out), { + return export_ImVec2(ImGui::GetMouseDragDelta(button, lock_threshold), out); + })); + // IMGUI_API void ResetMouseDragDelta(int button = 0); // + emscripten::function("ResetMouseDragDelta", &ImGui::ResetMouseDragDelta); + // IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you + emscripten::function("GetMouseCursor", &ImGui::GetMouseCursor); + // IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type + emscripten::function("SetMouseCursor", &ImGui::SetMouseCursor); + // IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. + emscripten::function("CaptureKeyboardFromApp", &ImGui::CaptureKeyboardFromApp); + // IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). + emscripten::function("CaptureMouseFromApp", &ImGui::CaptureMouseFromApp); + + // Helpers functions to access functions pointers in ImGui::GetIO() + // IMGUI_API void* MemAlloc(size_t sz); + emscripten::function("MemAlloc", FUNCTION(emscripten::val, (size_t sz), { + void* p = ImGui::MemAlloc(sz); + return emscripten::val(p); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void MemFree(void* ptr); + emscripten::function("MemFree", FUNCTION(void, (emscripten::val ptr), { + void* _ptr = ptr.as(emscripten::allow_raw_pointers()); + ImGui::MemFree(_ptr); + })); + // IMGUI_API const char* GetClipboardText(); + emscripten::function("GetClipboardText", FUNCTION(std::string, (), { + return ImGui::GetClipboardText(); + })); + // IMGUI_API void SetClipboardText(const char* text); + emscripten::function("SetClipboardText", FUNCTION(void, (emscripten::val text), { + ImGui::SetClipboardText(text.as().c_str()); + })); + + // Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. + // All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. + // IMGUI_API const char* GetVersion(); + emscripten::function("GetVersion", FUNCTION(std::string, (), { + return ImGui::GetVersion(); + })); + // IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); + emscripten::function("CreateContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::CreateContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void DestroyContext(ImGuiContext* ctx); + emscripten::function("DestroyContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::DestroyContext(_ctx); + })); + // IMGUI_API ImGuiContext* GetCurrentContext(); + emscripten::function("GetCurrentContext", FUNCTION(emscripten::val, (), { + ImGuiContext* ctx = ImGui::GetCurrentContext(); + return (ctx == NULL) ? emscripten::val::null() : emscripten::val(ctx); + }), emscripten::allow_raw_pointers()); + // IMGUI_API void SetCurrentContext(ImGuiContext* ctx); + emscripten::function("SetCurrentContext", FUNCTION(void, (emscripten::val ctx), { + ImGuiContext* _ctx = ctx.isNull() ? NULL : ctx.as(emscripten::allow_raw_pointers()); + ImGui::SetCurrentContext(_ctx); + })); +} diff --git a/bind-imgui.d.ts b/bind-imgui.d.ts new file mode 100644 index 0000000..34db721 --- /dev/null +++ b/bind-imgui.d.ts @@ -0,0 +1,1558 @@ +import * as emscripten from "./emscripten"; +export * from "./emscripten"; + +export interface mallinfo { + arena: number; + ordblks: number; + smblks: number; + hblks: number; + hblkhd: number; + usmblks: number; + fsmblks: number; + uordblks: number; + fordblks: number; + keepcost: number; +} + +export function mallinfo(): mallinfo; + +export const IMGUI_VERSION: string; + +export const ImDrawVertSize: number; +export const ImDrawIdxSize: number; +export const ImDrawVertPosOffset: number; +export const ImDrawVertUVOffset: number; +export const ImDrawVertColOffset: number; + +export type ImAccess = (value?: T) => T; +export type ImScalar = [ T ]; +export type ImTuple2 = [ T, T ]; +export type ImTuple3 = [ T, T, T ]; +export type ImTuple4 = [ T, T, T, T ]; + +// Typedefs and Enumerations (declared as int for compatibility and to not pollute the top of this file) +// typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +export type ImU32 = number; +// typedef unsigned int ImGuiID; // unique ID used by widgets (typically hashed from a stack of string) +export type ImGuiID = number; +// typedef unsigned short ImWchar; // character for keyboard input/display +export type ImWchar = number; +// typedef void* ImTextureID; // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +export type ImTextureID = any; + +// Flags for ImGui::Begin() +export const enum ImGuiWindowFlags { + NoTitleBar = 1 << 0, // Disable title-bar + NoResize = 1 << 1, // Disable user resizing with the lower-right grip + NoMove = 1 << 2, // Disable user moving the window + NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + //ShowBorders = 1 << 7, // Show borders around windows and items (OBSOLETE! Use e.g. style.FrameBorderSize=1.0f to enable borders). + NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + MenuBar = 1 << 10, // Has a menu-bar + HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ResizeFromAnySide = 1 << 17, // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + + // [Internal] + ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() +} + +// Flags for ImGui::InputText() +export const enum ImGuiInputTextFlags { + CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + CharsUppercase = 1 << 2, // Turn a..z into A..Z + CharsNoBlank = 1 << 3, // Filter out spaces, tabs + AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + CallbackCharFilter = 1 << 9, // Call user function to filter character. Modify data->EventChar to replace/filter input, or return 1 to discard character. + AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + AlwaysInsertMode = 1 << 13, // Insert mode + ReadOnly = 1 << 14, // Read-only mode + Password = 1 << 15, // Password mode, display all characters as '*' + NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + // [Internal] + Multiline = 1 << 20 // For internal use by InputTextMultiline() +} + +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() +export const enum ImGuiTreeNodeFlags { + Selected = 1 << 0, // Draw as selected + Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + DefaultOpen = 1 << 5, // Default node to be open + OpenOnDoubleClick = 1 << 6, // Need double-click to open node + OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + Bullet = 1 << 9, // Display a bullet instead of arrow + FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + //SpanAllAvailWidth = 1 << 11, // FIXME: TODO: Extend hit box horizontally even if not framed + //NoScrollOnOpen = 1 << 12, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible + CollapsingHeader = Framed | NoAutoOpenOnLog +} + +// Flags for ImGui::Selectable() +export const enum ImGuiSelectableFlags { + DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + AllowDoubleClick = 1 << 2 // Generate press events on double clicks too +} + +// Flags for ImGui::BeginCombo() +export const enum ImGuiComboFlags { + PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + HeightRegular = 1 << 2, // Max ~8 items visible (default) + HeightLarge = 1 << 3, // Max ~20 items visible + HeightLargest = 1 << 4, // As many fitting items as possible + HeightMask_ = HeightSmall | HeightRegular | HeightLarge | HeightLargest +} + +// Flags for ImGui::IsWindowFocused() +export const enum ImGuiFocusedFlags { + ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() +export const enum ImGuiHoveredFlags { + Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + AllowWhenBlockedByPopup = 1 << 2, // Return true even if a popup window is normally blocking access to this item/window + //AllowWhenBlockedByModal = 1 << 3, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet. + AllowWhenBlockedByActiveItem = 1 << 4, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + AllowWhenOverlapped = 1 << 5, // Return true even if the position is overlapped by another window + RectOnly = AllowWhenBlockedByPopup | AllowWhenBlockedByActiveItem | AllowWhenOverlapped, + RootAndChildWindows = RootWindow | ChildWindows +} + +// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload() +export const enum ImGuiDragDropFlags { + // BeginDragDropSource() flags + SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + // AcceptDragDropPayload() flags + AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + AcceptPeekOnly = AcceptBeforeDelivery | AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. +} + +// Standard Drag and Drop payload types. You can define you own payload types using 8-characters long strings. Types starting with '_' are defined by Dear ImGui. +export const IMGUI_PAYLOAD_TYPE_COLOR_3F: string; // = "_COL3F"; // float[3] // Standard type for colors, without alpha. User code may use this type. +export const IMGUI_PAYLOAD_TYPE_COLOR_4F: string; // = "_COL4F"; // float[4] // Standard type for colors. User code may use this type. + +// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array +export const enum ImGuiKey { + Tab, // for tabbing through fields + LeftArrow, // for text edit + RightArrow,// for text edit + UpArrow, // for text edit + DownArrow, // for text edit + PageUp, + PageDown, + Home, // for text edit + End, // for text edit + Delete, // for text edit + Backspace, // for text edit + Enter, // for text edit + Escape, // for text edit + A, // for text edit CTRL+A: select all + C, // for text edit CTRL+C: copy + V, // for text edit CTRL+V: paste + X, // for text edit CTRL+X: cut + Y, // for text edit CTRL+Y: redo + Z, // for text edit CTRL+Z: undo + COUNT +} + +// Enumeration for PushStyleColor() / PopStyleColor() +export const enum ImGuiCol { + Text, + TextDisabled, + WindowBg, // Background of normal windows + ChildBg, // Background of child windows + PopupBg, // Background of popups, menus, tooltips windows + Border, + BorderShadow, + FrameBg, // Background of checkbox, radio button, plot, slider, text input + FrameBgHovered, + FrameBgActive, + TitleBg, + TitleBgActive, + TitleBgCollapsed, + MenuBarBg, + ScrollbarBg, + ScrollbarGrab, + ScrollbarGrabHovered, + ScrollbarGrabActive, + CheckMark, + SliderGrab, + SliderGrabActive, + Button, + ButtonHovered, + ButtonActive, + Header, + HeaderHovered, + HeaderActive, + Separator, + SeparatorHovered, + SeparatorActive, + ResizeGrip, + ResizeGripHovered, + ResizeGripActive, + CloseButton, + CloseButtonHovered, + CloseButtonActive, + PlotLines, + PlotLinesHovered, + PlotHistogram, + PlotHistogramHovered, + TextSelectedBg, + ModalWindowDarkening, // darken entire screen when a modal window is active + DragDropTarget, + COUNT +} + +// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure. +// NB: the enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. During initialization, feel free to just poke into ImGuiStyle directly. +// NB: if changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type. +export const enum ImGuiStyleVar { + // Enum name ......................// Member in ImGuiStyle structure (see ImGuiStyle for descriptions) + Alpha, // float Alpha + WindowPadding, // ImVec2 WindowPadding + WindowRounding, // float WindowRounding + WindowBorderSize, // float WindowBorderSize + WindowMinSize, // ImVec2 WindowMinSize + ChildRounding, // float ChildRounding + ChildBorderSize, // float ChildBorderSize + PopupRounding, // float PopupRounding + PopupBorderSize, // float PopupBorderSize + FramePadding, // ImVec2 FramePadding + FrameRounding, // float FrameRounding + FrameBorderSize, // float FrameBorderSize + ItemSpacing, // ImVec2 ItemSpacing + ItemInnerSpacing, // ImVec2 ItemInnerSpacing + IndentSpacing, // float IndentSpacing + GrabMinSize, // float GrabMinSize + ButtonTextAlign, // ImVec2 ButtonTextAlign + Count_, COUNT = Count_ +} + +// Enumeration for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton() +export const enum ImGuiColorEditFlags { + NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + // User Options (right-click on widget to change some of them). You can set application defaults using SetColorEditOptions(). The idea is that you probably don't want to override them in most of your calls, let the user choose and/or call SetColorEditOptions() during startup. + AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use Float flag as well). + RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + HSV = 1 << 14, // [Inputs] // " + HEX = 1 << 15, // [Inputs] // " + Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. + // Internals/Masks + _InputsMask = RGB|HSV|HEX, + _DataTypeMask = Uint8|Float, + _PickerMask = PickerHueWheel|PickerHueBar, + _OptionsDefault = Uint8|RGB|PickerHueBar // Change application default using SetColorEditOptions() +} + +// Enumeration for GetMouseCursor() +export const enum ImGuiMouseCursor { + None = -1, + Arrow = 0, + TextInput, // When hovering over InputText, etc. + Move, // Unused + ResizeNS, // When hovering over an horizontal border + ResizeEW, // When hovering over a vertical border or a column + ResizeNESW, // When hovering over the bottom-left corner of a window + ResizeNWSE, // When hovering over the bottom-right corner of a window + Count_, COUNT = Count_ +} + +// Condition for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions +// All those functions treat 0 as a shortcut to Always. From the point of view of the user use this as an enum (don't combine multiple values into flags). +export const enum ImGuiCond { + Always = 1 << 0, // Set the variable + Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + FirstUseEver = 1 << 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file) + Appearing = 1 << 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time) +} + +export const enum ImDrawCornerFlags +{ + TopLeft = 1 << 0, // 0x1 + TopRight = 1 << 1, // 0x2 + BotLeft = 1 << 2, // 0x4 + BotRight = 1 << 3, // 0x8 + Top = TopLeft | TopRight, // 0x3 + Bot = BotLeft | BotRight, // 0xC + Left = TopLeft | BotLeft, // 0x5 + Right = TopRight | BotRight, // 0xA + All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of All, as a convenience +} + +export const enum ImDrawListFlags +{ + AntiAliasedLines = 1 << 0, + AntiAliasedFill = 1 << 1 +} + +export type ImGuiContext = any; + +export interface interface_ImVec2 { + x: number; + y: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec2 extends emscripten.EmscriptenClassReference implements interface_ImVec2 { + public x: number; + public y: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec2 extends NativeClass implements interface_ImVec2 { +// public x: number; +// public y: number; +// public constructor(); +// public constructor(x: number, y: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +export interface interface_ImVec4 { + x: number; + y: number; + z: number; + w: number; + Copy(other: Readonly): this; + Equals(other: Readonly): boolean; +} + +export class reference_ImVec4 extends emscripten.EmscriptenClassReference implements interface_ImVec4 { + public x: number; + public y: number; + public z: number; + public w: number; + public Copy(other: Readonly): this; + public Equals(other: Readonly): boolean; +} + +// export class ImVec4 extends NativeClass implements interface_ImVec4 { +// public x: number; +// public y: number; +// public z: number; +// public w: number; +// public constructor(); +// public constructor(x: number, y: number, z: number, w: number); +// public Copy(other: Readonly): this; +// public Equals(other: Readonly): boolean; +// } + +// export class ImColor extends NativeClass { +// public Value: ImVec4; +// } + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData extends emscripten.EmscriptenClass { + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public EventFlag: ImGuiInputTextFlags; + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public Flags: ImGuiInputTextFlags; + // void* UserData; // What user passed to InputText() // Read-only + public UserData: any; + // bool ReadOnly; // Read-only mode // Read-only + public ReadOnly: boolean; + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public EventChar: ImWchar; + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public EventKey: ImGuiKey; + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public getBuf(): string; + public setBuf(value: string): void; + // int BufTextLen; // Current text length in bytes // Read-write + public BufTextLen: number; + // int BufSize; // Maximum text length in bytes // Read-only + public BufSize: number; + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public BufDirty: boolean; + // int CursorPos; // // Read-write + public CursorPos: number; + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public SelectionStart: number; + // int SelectionEnd; // // Read-write + public SelectionEnd: number; + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void; + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null): void; + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean; +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData extends emscripten.EmscriptenClass +{ + // void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + public UserData: any; + // ImVec2 Pos; // Read-only. Window position, for reference. + public getPos(): Readonly; + // ImVec2 CurrentSize; // Read-only. Current window size. + public getCurrentSize(): Readonly; + // ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. + public getDesiredSize(): reference_ImVec2; +} + +export class ImGuiListClipper extends emscripten.EmscriptenClass { + public StartPosY: number; + public ItemsHeight: number; + public ItemsCount: number; + public StepNo: number; + public DisplayStart: number; + public DisplayEnd: number; + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count?: number, items_height?: number); + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean; + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void; + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void; +} + +export interface interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): interface_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): interface_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): interface_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): interface_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): interface_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): interface_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): interface_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): interface_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): interface_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): interface_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): interface_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + ScaleAllSizes(scale_factor: number): void; +} + +export class ImGuiStyle extends emscripten.EmscriptenClass implements interface_ImGuiStyle { + // float Alpha; // Global alpha applies to everything in ImGui + Alpha: number; + // ImVec2 WindowPadding; // Padding within a window + getWindowPadding(): reference_ImVec2; + // float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowRounding: number; + // float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + WindowBorderSize: number; + // ImVec2 WindowMinSize; // Minimum window size + getWindowMinSize(): reference_ImVec2; + // ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): reference_ImVec2; + // float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildRounding: number; + // float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + ChildBorderSize: number; + // float PopupRounding; // Radius of popup window corners rounding. + PopupRounding: number; + // float PopupBorderSize; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupBorderSize: number; + // ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets) + getFramePadding(): reference_ImVec2; + // float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameRounding: number; + // float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + FrameBorderSize: number; + // ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): reference_ImVec2; + // ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): reference_ImVec2; + // ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): reference_ImVec2; + // float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + IndentSpacing: number; + // float ColumnsMinSpacing; // Minimum horizontal spacing between two columns + ColumnsMinSpacing: number; + // float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarSize: number; + // float ScrollbarRounding; // Radius of grab corners for scrollbar + ScrollbarRounding: number; + // float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + GrabMinSize: number; + // float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + GrabRounding: number; + // ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): reference_ImVec2; + // ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): reference_ImVec2; + // ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): reference_ImVec2; + // bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedLines: boolean; + // bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + AntiAliasedFill: boolean; + // float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + CurveTessellationTol: number; + // ImVec4 Colors[ImGuiCol_COUNT]; + getColorsAt(idx: number): reference_ImVec4; + setColorsAt(idx: number, value: Readonly): boolean; + + // IMGUI_API ImGuiStyle(); + // IMGUI_API void ScaleAllSizes(float scale_factor); + public ScaleAllSizes(scale_factor: number): void; +} + +// export class ImDrawCmd extends NativeClass { +export class reference_ImDrawCmd extends emscripten.EmscriptenClassReference { + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + readonly ElemCount: number; + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + getClipRect(): Readonly; + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + readonly TextureId: ImTextureID; + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } + // public readonly ClipRect: Readonly; +} + +export class reference_ImDrawListSharedData extends emscripten.EmscriptenClassReference { +} + +// export class ImDrawList extends NativeClass { +export class reference_ImDrawList extends emscripten.EmscriptenClassReference { + public IterateDrawCmds(callback: (draw_cmd: reference_ImDrawCmd, ElemStart: number) => void): void; + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + public readonly IdxBuffer: Uint8Array; + // ImVector VtxBuffer; // Vertex buffer. + public readonly VtxBuffer: Uint8Array; + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void; + // IMGUI_API void PopClipRect(); + public PopClipRect(): void; + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags, thickness: number): void; + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: ImU32, rounding: number, rounding_corners_flags: ImDrawCornerFlags): void; + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: ImU32, col_upr_right: ImU32, col_bot_right: ImU32, col_bot_left: ImU32): void; + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: ImU32): void; + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: ImU32, thickness: number): void; + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: ImU32): void; + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: ImU32, num_segments: number, thickness: number): void; + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: ImU32, num_segments: number): void; + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: ImU32, text_begin: string, text_end: number | null): void; + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: reference_ImFont, font_size: number, pos: Readonly, col: ImU32, text_begin: string, text_end: number | null, wrap_width: number, cpu_fine_clip_rect: Readonly | null): void; + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: ImU32, thickness: number, num_segments: number): void; + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// export class ImDrawData extends NativeClass { +export class reference_ImDrawData extends emscripten.EmscriptenClassReference { + public IterateDrawLists(callback: (draw_list: reference_ImDrawList) => void): void; + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + public readonly Valid: boolean; + // ImDrawList** CmdLists; + // int CmdListsCount; + public readonly CmdListsCount: number; + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + public readonly TotalVtxCount: number; + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + public readonly TotalIdxCount: number; + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + // public ScaleClipRects(sc: Readonly): void; + public ScaleClipRects(sc: Readonly): void; +} + +export class reference_ImFont extends emscripten.EmscriptenClassReference { + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string; + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +export class reference_ImFontAtlas extends emscripten.EmscriptenClassReference { + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number }; + // void SetTexID(ImTextureID id) { TexID = id; } + + // //------------------------------------------- + // Glyph Ranges + // //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + // //------------------------------------------- + // Custom Rectangles/Glyphs API + // //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + // //------------------------------------------- + // Members + // //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + getTexID(): WebGLTexture | null; + setTexID(value: WebGLTexture | null): void; + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + readonly TexWidth: number; + // int TexHeight; // Texture height calculated during Build(). + readonly TexHeight: number; + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +export class reference_ImGuiIO extends emscripten.EmscriptenClassReference { + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + public getDisplaySize(): reference_ImVec2; + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + public DeltaTime: number; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public getKeyMapAt(index: ImGuiKey): number; + public setKeyMapAt(index: ImGuiKey, value: number): boolean; + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + public getFonts(): reference_ImFontAtlas; + // float FontGlobalScale; // = 1.0f // Global scale all fonts + public FontGlobalScale: number; + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + public getDisplayFramebufferScale(): reference_ImVec2; + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + public getMousePos(): reference_ImVec2; + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public getMouseDownAt(index: number): boolean; + public setMouseDownAt(index: number, value: boolean): boolean; + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public MouseWheel: number; + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + public MouseDrawCursor: boolean; + // bool KeyCtrl; // Keyboard modifier pressed: Control + public KeyCtrl: boolean; + // bool KeyShift; // Keyboard modifier pressed: Shift + public KeyShift: boolean; + // bool KeyAlt; // Keyboard modifier pressed: Alt + public KeyAlt: boolean; + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + public KeySuper: boolean; + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public getKeysDownAt(index: number): boolean; + public setKeysDownAt(index: number, value: boolean): boolean; + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void; + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + public WantCaptureMouse: boolean; + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + public WantCaptureKeyboard: boolean; + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + public WantTextInput: boolean; + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + public WantMoveMouse: boolean; + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + public Framerate: number; + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + public getMouseDelta(): Readonly; + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public getMouseDownDurationAt(index: number): number; + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public getKeysDownDurationAt(index: number): number; + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): reference_ImGuiIO; +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): reference_ImDrawData | null; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void; +// IMGUI_API void Shutdown(); +export function Shutdown(): void; + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: [ boolean ] | null): void; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null): void; +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean; +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void; + +// Window +export function Begin(name: string, p_open: [ boolean ] | null /* = NULL */, flags: ImGuiWindowFlags/* = 0 */): boolean; +export function End(): void; +export function BeginChild(id: string | ImGuiID, size: Readonly, border: boolean, extra_flags: ImGuiWindowFlags): boolean; +export function EndChild(): void; +export function GetContentRegionMax(out: interface_ImVec2): typeof out; +export function GetContentRegionAvail(out: interface_ImVec2): typeof out; +export function GetContentRegionAvailWidth(): number; +export function GetWindowContentRegionMin(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionMax(out: interface_ImVec2): typeof out; +export function GetWindowContentRegionWidth(): number; +export function GetWindowDrawList(): reference_ImDrawList; +export function GetWindowPos(out: interface_ImVec2): typeof out; +export function GetWindowSize(out: interface_ImVec2): typeof out; +export function GetWindowWidth(): number; +export function GetWindowHeight(): number; +export function IsWindowCollapsed(): boolean; +export function IsWindowAppearing(): boolean; +export function SetWindowFontScale(scale: number): void; + +export function SetNextWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */, pivot: Readonly/* = ImVec2(0,0) */): void; +export function SetNextWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null/* = NULL */, data: any/* = NULL */): void; +export function SetNextWindowContentSize(size: Readonly): void; +export function SetNextWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetNextWindowFocus(): void; +export function SetWindowPos(pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowSize(size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowCollapsed(collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowFocus(): void; +export function SetWindowNamePos(name: string, pos: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameSize(name: string, size: Readonly, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameCollapsed(name: string, collapsed: boolean, cond: ImGuiCond/* = 0 */): void; +export function SetWindowNameFocus(name: string): void; + +export function GetScrollX(): number; +export function GetScrollY(): number; +export function GetScrollMaxX(): number; +export function GetScrollMaxY(): number; +export function SetScrollX(scroll_x: number): void; +export function SetScrollY(scroll_y: number): void; +export function SetScrollHere(center_y_ratio: number/* = 0.5f */): void; +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number/* = 0.5f */): void; +// function SetStateStorage(tree: ImGuiStorage | null): void; +// function GetStateStorage(): ImGuiStorage | null; + +// Parameters stacks (shared) +// function PushFont(font: ImFont | null): void; +// function PopFont(): void; +export function PushStyleColor(idx: ImGuiCol, col: ImU32 | Readonly): void; +export function PopStyleColor(count: number/* = 1 */): void; +export function PushStyleVar(idx: ImGuiStyleVar, val: number | Readonly): void; +export function PopStyleVar(count: number/* = 1 */): void; +export function GetStyleColorVec4(idx: ImGuiCol): Readonly; +export function GetFont(): reference_ImFont; +export function GetFontSize(): number; +export function GetFontTexUvWhitePixel(out: interface_ImVec2): typeof out; +export function GetColorU32(idx: ImGuiCol, alpha_mul: number/* = 1.0f */): ImU32; +// export function GetColorU32(col: Readonly): ImU32; +// export function GetColorU32(col: ImU32): ImU32; + +// Parameters stacks (current window) +export function PushItemWidth(item_width: number): void; +export function PopItemWidth(): void; +export function CalcItemWidth(): number; +export function PushTextWrapPos(wrap_pos_x: number/* = 0.0f */): void; +export function PopTextWrapPos(): void; +export function PushAllowKeyboardFocus(allow_keyboard_focus: boolean): void; +export function PopAllowKeyboardFocus(): void; +export function PushButtonRepeat(repeat: boolean): void; +export function PopButtonRepeat(): void; + +// Cursor / Layout +export function Separator(): void; +export function SameLine(pos_x: number/* = 0.0f */, spacing_w: number/* = -1.0f */): void; +export function NewLine(): void; +export function Spacing(): void; +export function Dummy(size: Readonly): void; +export function Indent(indent_w: number/* = 0.0f */): void; +export function Unindent(indent_w: number/* = 0.0f */): void; +export function BeginGroup(): void; +export function EndGroup(): void; +export function GetCursorPos(out: interface_ImVec2): typeof out; +export function GetCursorPosX(): number; +export function GetCursorPosY(): number; +export function SetCursorPos(local_pos: Readonly): void; +export function SetCursorPosX(x: number): void; +export function SetCursorPosY(y: number): void; +export function GetCursorStartPos(out: interface_ImVec2): typeof out; +export function GetCursorScreenPos(out: interface_ImVec2): typeof out; +export function SetCursorScreenPos(pos: interface_ImVec2): void; +export function AlignTextToFramePadding(): void; +export function GetTextLineHeight(): number; +export function GetTextLineHeightWithSpacing(): number; +export function GetFrameHeight(): number; +export function GetFrameHeightWithSpacing(): number; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +export function Columns(count: number/* = 1 */, id: string | null/* = NULL */, border: boolean/* = true */): void; +export function NextColumn(): void; +export function GetColumnIndex(): number; +export function GetColumnWidth(column_index: number/* = -1 */): number; +export function SetColumnWidth(column_index: number, width: number): void; +export function GetColumnOffset(column_index: number/* = -1 */): number; +export function SetColumnOffset(column_index: number, offset_x: number): void; +export function GetColumnsCount(): number; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// export function PushID(str_id_begin: string, str_id_end: string): void; +// export function PushID(ptr_id: any): void; +// export function PushID(int_id: number): void; +export function PushID(id: string | number): void; +export function PopID(): void; +// export function GetID(str_id_begin: string, str_id_end: string): ImGuiID; +// export function GetID(ptr_id: any): ImGuiID; +export function GetID(id: string | number): ImGuiID; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string, /* text_end: string = NULL */): void; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +export function Text(fmt: string/*, ...args: any[]*/): void; +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +export function TextColored(col: Readonly, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColoredV(col: Readonly, fmt: string/* , args: any[] */): void; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +export function TextDisabled(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabledV(fmt: string/* , args: any[] */): void; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +export function TextWrapped(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrappedV(fmt: string/* , args: any[] */): void; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +export function LabelText(label: string, fmt: string/* , ...args: any[] */): void; +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelTextV(label: string, fmt: string/* , args: any[] */): void; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +export function BulletText(fmt: string/* , ...args: any[] */): void; +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletTextV(fmt: string/* , args: any[] */): void; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export function Bullet(): void; + +// Widgets: Main +export function Button(label: string, size: Readonly): boolean; +export function SmallButton(label: string): boolean; +export function InvisibleButton(str_id: string, size: Readonly): boolean; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, tint_col: Readonly, border_col: Readonly): void; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly, uv1: Readonly, frame_padding: number, bg_col: Readonly, tint_col: Readonly): void; +export function Checkbox(label: string, v: [ boolean ]): boolean; +export function CheckboxFlags(label: string, flags: ImScalar | null, flags_value: number): boolean; +// export function RadioButton(label: string, active: boolean): boolean; +// export function RadioButton(label: string, v: ImScalar, v_button: number): boolean; +export function RadioButton(label: string, active_or_v: boolean | ImScalar, v_button?: number): boolean; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number, value_offset: number, overlay_text: string | null, scale_min: number | null, scale_max: number | null, graph_size: Readonly): void; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly, overlay: string | null): void; + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +export function BeginCombo(label: string, preview_value: string | null, flags: ImGuiComboFlags/* = 0 */): boolean; +export function EndCombo(): void; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +export function Combo(label: string, current_item: ImScalar, items: string[/**/], items_count: number, popup_max_height_in_items: number/* = -1 */): boolean; +// export function Combo(label: string, current_item: ImScalar, items_separated_by_zeros: string, popup_max_height_in_items: number/* = -1 */): boolean; + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +export function DragFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string | null/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloat4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function DragFloatRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0.0f */, v_max: number/* = 0.0f */, display_format: string/* = "%.3f" */, display_format_max: string | null/* = NULL */, power: number/* = 1.0f */): boolean; +export function DragInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt3(label: string, v: ImTuple3 | ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragInt4(label: string, v: ImTuple4, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */): boolean; +export function DragIntRange2(label: string, v_current_min: ImScalar, v_current_max: ImScalar, v_speed: number/* = 1.0f */, v_min: number/* = 0 */, v_max: number/* = 0 */, display_format: string/* = "%.0f" */, display_format_max: string | null/* = NULL */): boolean; + +// Widgets: Input with Keyboard +export function InputText(label: string, buf: [ string ], buf_size: number, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: [ string ], buf_size: number, size: Readonly, flags: ImGuiInputTextFlags/* = 0 */, callback: ImGuiTextEditCallback | null/* = NULL */, user_data: any/* = NULL */): boolean; +export function InputFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 0.0f */, step_fast: number/* = 0.0f */, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat3(label: string, v: ImTuple3 | ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputFloat4(label: string, v: ImTuple4, decimal_precision: number/* = -1 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, step: number/* = 1 */, step_fast: number/* = 100 */, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt3(label: string, v: ImTuple3 | ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; +export function InputInt4(label: string, v: ImTuple4, extra_flags: ImGuiInputTextFlags/* = 0 */): boolean; + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +export function SliderFloat(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderFloat4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function SliderAngle(label: string, v_rad: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_degrees_min: number/* = -360.0f */, v_degrees_max: number/* = +360.0f */): boolean; +export function SliderInt(label: string, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt2(label: string, v: ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt3(label: string, v: ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function SliderInt4(label: string, v: ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; +export function VSliderFloat(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.3f" */, power: number/* = 1.0f */): boolean; +export function VSliderInt(label: string, size: Readonly, v: ImScalar | ImTuple2 | ImTuple3 | ImTuple4, v_min: number, v_max: number, display_format: string/* = "%.0f" */): boolean; + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +export function ColorEdit3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorEdit4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker3(label: string, col: ImTuple3 | ImTuple4, flags: ImGuiColorEditFlags/* = 0 */): boolean; +export function ColorPicker4(label: string, col: ImTuple4, flags: ImGuiColorEditFlags/* = 0 */, ref_col: any /* const float* *//* = NULL */): boolean; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: ImGuiColorEditFlags, size: Readonly): boolean; +export function SetColorEditOptions(flags: ImGuiColorEditFlags): void; + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt: string): boolean; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: ImGuiTreeNodeFlags/* = 0 */, fmt: string): boolean; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export function TreePush(id: string | number): void; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export function TreePop(): void; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export function TreeAdvanceToLabelPos(): void; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export function GetTreeNodeToLabelSpacing(): number; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: ImGuiCond/* = 0 */): void; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, p_open: [ boolean ] | null, flags: ImGuiTreeNodeFlags/* = 0 */): boolean; + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected?: boolean | [ boolean ], flags?: ImGuiSelectableFlags, size?: interface_ImVec2): boolean; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: ImScalar, items: string[], items_count: number, height_in_items: number/* = -1 */): boolean; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean; +export function ListBoxFooter(): void; + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +export function Value(prefix: string, b: boolean): void; +export function Value(prefix: string, v: number): void; +export function Value(prefix: string, v: number, float_format: string/* = NULL */): void; + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void; +export function BeginTooltip(): void; +export function EndTooltip(): void; + +// Menus +export function BeginMainMenuBar(): boolean; +export function EndMainMenuBar(): void; +export function BeginMenuBar(): boolean; +export function EndMenuBar(): void; +export function BeginMenu(label: string, enabled: boolean/* = true */): boolean; +export function EndMenu(): void; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string, p_selected: [ boolean ], enabled: boolean/* = true */): boolean; + +// Popups +export function OpenPopup(str_id: string): void; +export function OpenPopupOnItemClick(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopup(str_id: string): boolean; +export function BeginPopupModal(name: string, p_open: [ boolean ]/* = NULL */, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +export function BeginPopupContextItem(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function BeginPopupContextWindow(str_id: string/* = NULL */, mouse_button: number/* = 1 */, also_over_items: boolean/* = true */): boolean; +export function BeginPopupContextVoid(str_id: string/* = NULL */, mouse_button: number/* = 1 */): boolean; +export function EndPopup(): void; +export function IsPopupOpen(str_id: string): boolean; +export function CloseCurrentPopup(): void; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number/* = -1 */): void; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number/* = -1 */, filename: string | null/* = NULL */): void; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number/* = -1 */): void; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export function LogFinish(): void; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export function LogButtons(): void; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void; + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: ImGuiDragDropFlags/* = 0 */, mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: ImGuiCond/* = 0 */): boolean; +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: ImGuiDragDropFlags/* = 0 */): any; +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void; + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +// export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void; +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void; + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null/* = NULL */): void; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null/* = NULL */): void; + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export function SetItemDefaultFocus(): void; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number/* = 0 */): void; + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export function IsItemActive(): boolean; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number/* = 0 */): boolean; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export function IsItemVisible(): boolean; +// IMGUI_API bool IsAnyItemHovered(); +export function IsAnyItemHovered(): boolean; +// IMGUI_API bool IsAnyItemActive(); +export function IsAnyItemActive(): boolean; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: interface_ImVec2): typeof out; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export function SetItemAllowOverlap(): void; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: ImGuiFocusedFlags/* = 0 */): boolean; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: ImGuiHoveredFlags/* = 0 */): boolean; +// IMGUI_API bool IsAnyWindowFocused(); +export function IsAnyWindowFocused(): boolean; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export function IsAnyWindowHovered(): boolean; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean; +// IMGUI_API float GetTime(); +export function GetTime(): number; +// IMGUI_API int GetFrameCount(); +export function GetFrameCount(): number; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): reference_ImDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): reference_ImDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export function GetStyleColorName(idx: ImGuiCol): string; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean/* = false */, outward: number/* = +0.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null/* = NULL */, hide_text_after_double_hash: boolean/* = false */, wrap_width: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: ImScalar, out_items_display_end: ImScalar): void; + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: ImGuiID, size: Readonly, extra_flags: ImGuiWindowFlags/* = 0 */): boolean; +// IMGUI_API void EndChildFrame(); +export function EndChildFrame(): void; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: ImU32, out: interface_ImVec4): typeof out; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): ImU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export function ColorConvertRGBtoHSV(r: number, g: number, b: number, out_h: ImScalar, out_s: ImScalar, out_v: ImScalar): void; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export function ColorConvertHSVtoRGB(h: number, s: number, v: number, out_r: ImScalar, out_g: ImScalar, out_b: ImScalar): void; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: ImGuiKey): number; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean/* = true */): boolean; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(key_index: number, repeat_delay: number, rate: number): number; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean/* = false */): boolean; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number/* = 0 */, lock_threshold: number/* = -1.0f */): boolean; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean/* = true */): boolean; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null/* = NULL */): boolean; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: interface_ImVec2): typeof out; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number/* = 0 */, lock_threshold: number/* = -1.0f */, out: interface_ImVec2): typeof out; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number/* = 0 */): void; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export function GetMouseCursor(): ImGuiMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export function SetMouseCursor(type: ImGuiMouseCursor): void; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean/* = true */): void; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean/* = true */): void; + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export function MemAlloc(sz: number): any; +// IMGUI_API void MemFree(void* ptr); +export function MemFree(ptr: any): void; +// IMGUI_API const char* GetClipboardText(); +export function GetClipboardText(): string; +// IMGUI_API void SetClipboardText(const char* text); +export function SetClipboardText(text: string): void; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export function GetVersion(): string; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null, free_fn: ((ptr: any) => void) | null): ImGuiContext | null; +export function CreateContext(): ImGuiContext | null; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +export function DestroyContext(ctx: ImGuiContext | null): void; +// IMGUI_API ImGuiContext* GetCurrentContext(); +export function GetCurrentContext(): ImGuiContext | null; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export function SetCurrentContext(ctx: ImGuiContext | null): void; diff --git a/bind-imgui.js b/bind-imgui.js new file mode 100644 index 0000000..8b18a22 --- /dev/null +++ b/bind-imgui.js @@ -0,0 +1,21 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;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){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){if(!(ex instanceof ExitStatus)){throw ex}}));process["on"]("unhandledRejection",(function(reason,p){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){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}Module["setWindowTitle"]=(function(title){document.title=title})}Module["print"]=typeof console!=="undefined"?console.log:typeof print!=="undefined"?print:null;Module["printErr"]=typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn||Module["print"];Module.print=Module["print"];Module.printErr=Module["printErr"];for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;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;var ret=size=Math.ceil(size/factor)*factor;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;Module.printErr(text)}}var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"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){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_STATIC=2;var ALLOC_NONE=4;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>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}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;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+59664;__ATINIT__.push({func:(function(){__GLOBAL__sub_I_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_imgui_cpp()})},{func:(function(){__GLOBAL__sub_I_bind_cpp()})});memoryInitializer="data:application/octet-stream;base64,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QAAAAJgDAACQAwAAYAMAAJADAACQAwAAYAMAACAAAACQAwAAYAMAAGADAABgAwAAIAAAAJADAABgAwAAIAAAACAAAABAAAAAYAMAAGADAAAgAAAAYAMAAEADAAAgAAAAQAAAAJADAABgAwAAQAAAAJADAAAgAAAAYAMAAEAAAAAgAAAAYAMAACAAAABAAAAAkAMAAEAAAABgAwAAIAAAAEAAAABAAAAAkAMAAJADAAAgAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAACAAAABgAwAAIAAAAEAAAACwAwAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAIAAAALADAABgAwAAIAAAAEAAAACQAwAAkAMAAJADAABgAwAAIAAAAEAAAACQAwAAkAMAAGADAAAgAAAAQAAAALADAACwAwAAkAMAAJADAABgAwAAIAAAAEAAAACYAwAAQAAAAJADAABAAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAkAMAAEAAAABAAAAAYAMAACAAAABAAAAAQAAAALADAACwAwAAsAMAACAAAABAAAAAYAMAACAAAABAAAAAsAMAAJADAACQAwAAIAAAAGADAAAgAAAAQAAAAEAAAACwAwAAsAMAALADAAAgAAAAQAAAALADAABgAwAAIAAAAEAAAACwAwAAsAMAALADAAAgAAAAsAMAAGADAAAgAAAAQAAAALADAACwAwAAsAMAAEAAAACwAwAAYAMAACAAAABAAAAAQAAAAJADAACQAwAAQAMAALADAABAAAAAQAAAAEAAAABAAAAAQAMAACAAAABAAAAAQAAAAJADAACQAwAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAQAAAAEAAAABgAwAAIAAAAEAAAACYAwAAmAMAAGADAABAAAAAQAAAAEAAAABAAAAAkAMAAEAAAABAAAAAQAMAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAGADAAAgAAAAYAMAACAAAABAAAAAQAMAACAAAAAgAAAAQAMAAEAAAAAgAAAAmAMAAEAAAABAAwAAkAMAALADAACwAwAAkAMAAEADAACQAwAAQAAAAGADAABAAwAAUAAAAEADAABgAwAAmAMAAEAAAABAAAAAQAAAAJADAABAAwAAkAMAAEADAACQAwAAQAAAAEAAAABAAwAAsAMAALADAABAAwAAIAAAAGADAACQAwAAQAMAACAAAABAAAAAkAMAAEADAABgAwAAkAMAAEADAABAAAAAQAAAAEAAAABAAAAAQAMAAEAAAACQAwAAQAMAAEAAAACQAwAAQAAAAEADAACwAwAAQAAAAEAAAABgAwAAQAAAAEAAAABgAwAAkAMAAGADAAAgAAAAQAAAAJADAABAAwAAIAAAAIgAAABAAwAAQAAAAEADAABAAwAAiAAAALADAABgAwAAiAAAAJADAABAAAAAQAAAAIgAAACQAwAAQAAAAIgAAACwAwAAWAEAAJADAABAAwAAEAEAAIgDAABgAwAAEAEAAJADAABgAwAAYAMAAFgBAACQAwAAYAMAABABAACQAwAAkAMAAJADAABYAQAAkAMAAEAAAAAQAQAAQAMAAGgBAABAAAAAQAAAAIABAABAAAAAeAEAACAAAADIAAAAQAMAAPgAAABAAAAAQAMAAKgBAABAAAAAQAMAAIAAAABAAAAAQAAAAEAAAABAAAAAmAMAALADAACQAwAAQAMAAIAAAABAAAAAsAMAAEAAAACYAwAAIAAAAEAAAACwAwAAQAAAALgAAABAAwAAgAAAAEAAAACYAwAAIAAAAEAAAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAABAAwAAgAAAAEAAAACwAwAAmAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAQAMAAIAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAABAAAAAQAAAAJgDAABAAwAAgAAAAEAAAABAAAAAQAAAAEAAAACYAwAAsAMAAEADAACAAAAAQAAAAEAAAACYAwAAmAMAAJgDAACYAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAkAMAAEADAACAAAAAQAAAAEAAAACYAwAAsAMAAJADAACwAwAAQAMAAIAAAABAAAAAQAAAAJgDAACwAwAAQAMAAHAAAABAAwAAgAAAAEAAAABAAAAAYAMAAEADAAC4AQAAQAAAAEAAAADQAQAAQAMAAPgBAABAAwAA+AEAAJADAACwAwAAYAMAAPgBAAD4AQAAkAMAALADAAD4AQAAkAMAAPgBAABAAAAA8AAAAOAAAABgAwAA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KSAmJiAiRm9udCBBdGxhcyBub3QgY3JlYXRlZC4gRGlkIHlvdSBjYWxsIGlvLkZvbnRzLT5HZXRUZXhEYXRhQXNSR0JBMzIgLyBHZXRUZXhEYXRhQXNBbHBoYTggPyIAZy5TdHlsZS5DdXJ2ZVRlc3NlbGxhdGlvblRvbCA+IDAuMGYgJiYgIkludmFsaWQgc3R5bGUgc2V0dGluZyIAZy5TdHlsZS5BbHBoYSA+PSAwLjBmICYmIGcuU3R5bGUuQWxwaGEgPD0gMS4wZiAmJiAiSW52YWxpZCBzdHlsZSBzZXR0aW5nLiBBbHBoYSBjYW5ub3QgYmUgbmVnYXRpdmUgKGFsbG93cyB1cyB0byBhdm9pZCBhIGZldyBjbGFtcHMgaW4gY29sb3IgY29tcHV0YXRpb25zKSIAKGcuRnJhbWVDb3VudCA9PSAwIHx8IGcuRnJhbWVDb3VudEVuZGVkID09IGcuRnJhbWVDb3VudCkgJiYgIkZvcmdvdCB0byBjYWxsIFJlbmRlcigpIG9yIEVuZEZyYW1lKCkgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWU/IgBnLkZvbnQtPklzTG9hZGVkKCkAZy5Nb3ZpbmdXaW5kb3cgJiYgZy5Nb3ZpbmdXaW5kb3ctPlJvb3RXaW5kb3cAZy5Nb3ZpbmdXaW5kb3ctPk1vdmVJZCA9PSBnLk1vdmluZ1dpbmRvd01vdmVJZABEZWJ1ZyMjRGVmYXVsdABXaW5kb3cAZy5TZXR0aW5nc1dpbmRvd3MuZW1wdHkoKQBJbml0aWFsaXplAGcuSW5pdGlhbGl6ZWQAZy5DdXJyZW50V2luZG93U3RhY2suU2l6ZSA9PSAxAGcuV2luZG93cy5TaXplID09IGcuV2luZG93c1NvcnRCdWZmZXIuU2l6ZQBSZW5kZXJUcmlhbmdsZQBpbWd1aV9rZXkgPj0gMCAmJiBpbWd1aV9rZXkgPCBJbUd1aUtleV9DT1VOVAB1c2VyX2tleV9pbmRleCA+PSAwICYmIHVzZXJfa2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihHSW1HdWktPklPLktleXNEb3duKS9zaXplb2YoKkdJbUd1aS0+SU8uS2V5c0Rvd24pKSkAa2V5X2luZGV4ID49IDAgJiYga2V5X2luZGV4IDwgKChpbnQpKHNpemVvZihnLklPLktleXNEb3duKS9zaXplb2YoKmcuSU8uS2V5c0Rvd24pKSkAdXNlcl9rZXlfaW5kZXggPj0gMCAmJiB1c2VyX2tleV9pbmRleCA8ICgoaW50KShzaXplb2YoZy5JTy5LZXlzRG93bikvc2l6ZW9mKCpnLklPLktleXNEb3duKSkpAGJ1dHRvbiA+PSAwICYmIGJ1dHRvbiA8ICgoaW50KShzaXplb2YoZy5JTy5Nb3VzZURvd24pL3NpemVvZigqZy5JTy5Nb3VzZURvd24pKSkAIyNUb29sdGlwXyUwMmQAR2V0Q3VycmVudFdpbmRvd1JlYWQoKS0+RmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX1Rvb2x0aXAAIyNNZW51cwAjI01lbnVfJTAyZAAjI1BvcHVwXyUwOHgAZy5DdXJyZW50V2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXAAZy5DdXJyZW50UG9wdXBTdGFjay5TaXplID4gMABpZCAhPSAwAHdpbmRvd19jb250ZXh0AHZvaWRfY29udGV4dAB3aW5kb3ctPkZsYWdzICYgSW1HdWlXaW5kb3dGbGFnc19DaGlsZFdpbmRvdwBuYW1lICE9IDBMAGcuRnJhbWVDb3VudEVuZGVkICE9IGcuRnJhbWVDb3VudABwYXJlbnRfd2luZG93ICE9IDBMIHx8ICEoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX0NoaWxkV2luZG93KQB3aW5kb3dfc2l6ZV94X3NldF9ieV9hcGkgJiYgd2luZG93X3NpemVfeV9zZXRfYnlfYXBpAHdpbmRvd19wb3Nfc2V0X2J5X2FwaQAjUkVTSVpFACNDTE9TRQAoZmxhZ3MgJiBJbUd1aVdpbmRvd0ZsYWdzX05vVGl0bGVCYXIpICE9IDAAI1NDUk9MTFgAI1NDUk9MTFkASW1NYXgod2luX3NpemVfY29udGVudHNfdiwgd2luX3NpemVfYXZhaWxfdikgPiAwLjBmAFNjcm9sbGJhcgBXaW5kb3dCZwBDaGlsZEJnAFBvcHVwQmcAQm9yZGVyAEJvcmRlclNoYWRvdwBGcmFtZUJnAEZyYW1lQmdIb3ZlcmVkAEZyYW1lQmdBY3RpdmUAVGl0bGVCZwBUaXRsZUJnQWN0aXZlAFRpdGxlQmdDb2xsYXBzZWQATWVudUJhckJnAFNjcm9sbGJhckJnAFNjcm9sbGJhckdyYWIAU2Nyb2xsYmFyR3JhYkhvdmVyZWQAU2Nyb2xsYmFyR3JhYkFjdGl2ZQBDaGVja01hcmsAU2xpZGVyR3JhYgBTbGlkZXJHcmFiQWN0aXZlAEJ1dHRvbkhvdmVyZWQAQnV0dG9uQWN0aXZlAEhlYWRlcgBIZWFkZXJIb3ZlcmVkAEhlYWRlckFjdGl2ZQBTZXBhcmF0b3JIb3ZlcmVkAFNlcGFyYXRvckFjdGl2ZQBSZXNpemVHcmlwAFJlc2l6ZUdyaXBIb3ZlcmVkAFJlc2l6ZUdyaXBBY3RpdmUAQ2xvc2VCdXR0b24AQ2xvc2VCdXR0b25Ib3ZlcmVkAENsb3NlQnV0dG9uQWN0aXZlAFBsb3RMaW5lc0hvdmVyZWQAUGxvdEhpc3RvZ3JhbUhvdmVyZWQAVGV4dFNlbGVjdGVkQmcATW9kYWxXaW5kb3dEYXJrZW5pbmcARHJhZ0Ryb3BUYXJnZXQAKGZsYWdzICYgSW1HdWlIb3ZlcmVkRmxhZ3NfQWxsb3dXaGVuT3ZlcmxhcHBlZCkgPT0gMABnLkN1cnJlbnRXaW5kb3cAY2VudGVyX3lfcmF0aW8gPj0gMC4wZiAmJiBjZW50ZXJfeV9yYXRpbyA8PSAxLjBmAG9mZnNldCA+PSAtMQB0ZXh0ICE9IDBMACNpbWFnZQBhYgBnLkxvZ0ZpbGUgIT0gMEwACgBMb2cgVG8gVFRZAExvZyBUbyBGaWxlAExvZyBUbyBDbGlwYm9hcmQARGVwdGgACiMjACMjAD4AZy5BY3RpdmVJZCA9PSBpZABJbnB1dFNjYWxhckFzV2lkZ2V0UmVwbGFjZW1lbnQAJS4zZgAlLjBmIGRlZwAlLjBmACMjdgAjI21pbgAjI21heAB2X2lkeCA+PSAwICYmIHZfaWR4IDwgdmFsdWVzX2NvdW50AFBsb3RFeAAlZDogJTguNGcKJWQ6ICU4LjRnACVkOiAlOC40ZwB2MV9pZHggPj0gMCAmJiB2MV9pZHggPCB2YWx1ZXNfY291bnQAJS4wZiUlAFt4XQBbIF0AKHgpACggKQBwb3MgKyBieXRlc19jb3VudCA8PSBCdWZUZXh0TGVuACEoKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19DYWxsYmFja0hpc3RvcnkpICYmIChmbGFncyAmIEltR3VpSW5wdXRUZXh0RmxhZ3NfTXVsdGlsaW5lKSkASW5wdXRUZXh0RXgAISgoZmxhZ3MgJiBJbUd1aUlucHV0VGV4dEZsYWdzX0NhbGxiYWNrQ29tcGxldGlvbikgJiYgKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19BbGxvd1RhYklucHV0KSkAcGFzc3dvcmRfZm9udC0+R2x5cGhzLmVtcHR5KCkgJiYgcGFzc3dvcmRfZm9udC0+SW5kZXhBZHZhbmNlWC5lbXB0eSgpICYmIHBhc3N3b3JkX2ZvbnQtPkluZGV4TG9va3VwLmVtcHR5KCkAY2FsbGJhY2sgIT0gMEwAY2FsbGJhY2tfZGF0YS5CdWYgPT0gZWRpdF9zdGF0ZS5UZW1wVGV4dEJ1ZmZlci5EYXRhAGNhbGxiYWNrX2RhdGEuQnVmU2l6ZSA9PSBlZGl0X3N0YXRlLkJ1ZlNpemVBAGNhbGxiYWNrX2RhdGEuRmxhZ3MgPT0gZmxhZ3MAY2FsbGJhY2tfZGF0YS5CdWZUZXh0TGVuID09IChpbnQpc3RybGVuKGNhbGxiYWNrX2RhdGEuQnVmKQAhKGZsYWdzICYgSW1HdWlJbnB1dFRleHRGbGFnc19NdWx0aWxpbmUpAC0AKwAlZgAlJS4lZGYAJTA4WAAlZABJbUlzUG93ZXJPZlR3byhmbGFncyAmIEltR3VpQ29tYm9GbGFnc19IZWlnaHRNYXNrXykAIyNDb21ib18lMDJkACpVbmtub3duIGl0ZW0qACMjTWFpbk1lbnVCYXIAIXdpbmRvdy0+REMuTWVudUJhckFwcGVuZGluZwAjI21lbnViYXIAd2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfTWVudUJhcgB3aW5kb3ctPkRDLk1lbnVCYXJBcHBlbmRpbmcAIyNwcmV2aWV3ACMlMDJYJTAyWCUwMlgKUjogJWQsIEc6ICVkLCBCOiAlZAooJS4zZiwgJS4zZiwgJS4zZikAIyUwMlglMDJYJTAyWCUwMlgKUjolZCwgRzolZCwgQjolZCwgQTolZAooJS4zZiwgJS4zZiwgJS4zZiwgJS4zZikASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19JbnB1dHNNYXNrKSkASW1Jc1Bvd2VyT2ZUd28oKGludCkoZmxhZ3MgJiBJbUd1aUNvbG9yRWRpdEZsYWdzX19EYXRhVHlwZU1hc2spKQBJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIEltR3VpQ29sb3JFZGl0RmxhZ3NfX1BpY2tlck1hc2spKQBfQ09MM0YAX0NPTDRGAENvbG9yAGNvbnRleHQAUkdCAEhTVgBIRVgAMC4uMjU1ADAuMDAuLjEuMDAAQ29weSBhcy4uACglLjNmZiwgJS4zZmYsICUuM2ZmLCAlLjNmZikAKCVkLCVkLCVkLCVkKQAweCUwMlglMDJYJTAyWAAweCUwMlglMDJYJTAyWCUwMlgATTowLjAwMABNOjAwMAAjI1gAIyNZACMjWgAjI1cAJTMuMGYAUjolMy4wZgBHOiUzLjBmAEI6JTMuMGYAQTolMy4wZgBIOiUzLjBmAFM6JTMuMGYAVjolMy4wZgAlMC4zZgBSOiUwLjNmAEc6JTAuM2YAQjolMC4zZgBBOiUwLjNmAEg6JTAuM2YAUzolMC4zZgBWOiUwLjNmACMlMDJYJTAyWCUwMlglMDJYACMlMDJYJTAyWCUwMlgAIyNUZXh0ACUwMlglMDJYJTAyWCUwMlgAJTAyWCUwMlglMDJYACMjQ29sb3JCdXR0b24AcGlja2VyACMjcGlja2VyAGhzdgBzdgBodWUAYWxwaGEAQ3VycmVudAAjI2N1cnJlbnQAT3JpZ2luYWwAIyNvcmlnaW5hbAAjI3JnYgAjI2hzdgAjI2hleABJbUlzUG93ZXJPZlR3bygoaW50KShmbGFncyAmIChJbUd1aVNlcGFyYXRvckZsYWdzX0hvcml6b250YWwgfCBJbUd1aVNlcGFyYXRvckZsYWdzX1ZlcnRpY2FsKSkpAAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQAgfAAhd2luZG93LT5EQy5Hcm91cFN0YWNrLmVtcHR5KCkAY29sdW1ucyAhPSAwTABjb2x1bW5faW5kZXggPCBjb2x1bW5zLT5Db2x1bW5zLlNpemUAY29sdW1uc19jb3VudCA+IDEAQmVnaW5Db2x1bW5zAHdpbmRvdy0+REMuQ29sdW1uc1NldCA9PSAwTABjb2x1bW5zAGNvbHVtbnMtPklEID09IGlkAGNvbHVtbnMtPkNvbHVtbnMuU2l6ZSA9PSBjb2x1bW5zX2NvdW50ICsgMQBFbmRDb2x1bW5zAGNvbHVtbnNfY291bnQgPj0gMQAjVHJlZVB1c2gAJXM6ICVzAHRydWUAZmFsc2UAJSVzOiAlcwAlczogJS4zZgAjU291cmNlRXh0ZXJuAHNvdXJjZV9pZCAhPSAwAGcuRHJhZ0Ryb3BBY3RpdmUAdHlwZSAhPSAwTABzdHJsZW4odHlwZSkgPCAoKGludCkoc2l6ZW9mKHBheWxvYWQuRGF0YVR5cGUpL3NpemVvZigqcGF5bG9hZC5EYXRhVHlwZSkpKQAoZGF0YSAhPSAwTCAmJiBkYXRhX3NpemUgPiAwKSB8fCAoZGF0YSA9PSAwTCAmJiBkYXRhX3NpemUgPT0gMCkAY29uZCA9PSBJbUd1aUNvbmRfQWx3YXlzIHx8IGNvbmQgPT0gSW1HdWlDb25kX09uY2UAcGF5bG9hZC5Tb3VyY2VJZCAhPSAwAHBheWxvYWQuRGF0YUZyYW1lQ291bnQgIT0gLTEASW1HdWkgTWV0cmljcwBJbUd1aSAlcwBBcHBsaWNhdGlvbiBhdmVyYWdlICUuM2YgbXMvZnJhbWUgKCUuMWYgRlBTKQAlZCB2ZXJ0aWNlcywgJWQgaW5kaWNlcyAoJWQgdHJpYW5nbGVzKQAlZCBhbGxvY2F0aW9ucwABU2hvdyBjbGlwcGluZyByZWN0YW5nbGVzIHdoZW4gaG92ZXJpbmcgYW4gSW1EcmF3Q21kAFdpbmRvd3MARHJhd0xpc3QAQWN0aXZlIERyYXdMaXN0cyAoJWQpAFBvcHVwcwBPcGVuIFBvcHVwcyBTdGFjayAoJWQpAFBvcHVwSUQ6ICUwOHgsIFdpbmRvdzogJyVzJyVzJXMATlVMTAAgQ2hpbGRXaW5kb3cAIENoaWxkTWVudQBCYXNpYyBzdGF0ZQBIb3ZlcmVkV2luZG93OiAnJXMnAEhvdmVyZWRSb290V2luZG93OiAnJXMnAEhvdmVyZWRJZDogMHglMDhYLzB4JTA4WCAoJS4yZiBzZWMpAEFjdGl2ZUlkOiAweCUwOFgvMHglMDhYICglLjJmIHNlYykAQWN0aXZlSWRXaW5kb3c6ICclcycATmF2V2luZG93OiAnJXMnACMjT3ZlcmxheQBQb3M9JWYsJWYAU2l6ZT0lZiwlZgBDb2xsYXBzZWQ9JWQAIyMjAFtXaW5kb3ddWyVzXQoAUG9zPSVkLCVkCgBTaXplPSVkLCVkCgBDb2xsYXBzZWQ9JWQKAHJiAHd0AGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUgPT0gMCB8fCBkcmF3X2xpc3QtPl9WdHhXcml0ZVB0ciA9PSBkcmF3X2xpc3QtPlZ0eEJ1ZmZlci5EYXRhICsgZHJhd19saXN0LT5WdHhCdWZmZXIuU2l6ZQBBZGREcmF3TGlzdFRvUmVuZGVyTGlzdABkcmF3X2xpc3QtPklkeEJ1ZmZlci5TaXplID09IDAgfHwgZHJhd19saXN0LT5fSWR4V3JpdGVQdHIgPT0gZHJhd19saXN0LT5JZHhCdWZmZXIuRGF0YSArIGRyYXdfbGlzdC0+SWR4QnVmZmVyLlNpemUAKGludClkcmF3X2xpc3QtPl9WdHhDdXJyZW50SWR4ID09IGRyYXdfbGlzdC0+VnR4QnVmZmVyLlNpemUAZHJhd19saXN0LT5fVnR4Q3VycmVudElkeCA8ICgxIDw8IDE2KSAmJiAiVG9vIG1hbnkgdmVydGljZXMgaW4gSW1EcmF3TGlzdCB1c2luZyAxNi1iaXQgaW5kaWNlcy4gUmVhZCBjb21tZW50IGFib3ZlIgAKJSpzJS4qcwAgJS4qcwAocG9wdXAuV2luZG93LT5GbGFncyAmIEltR3VpV2luZG93RmxhZ3NfUG9wdXApICE9IDAAQ2xvc2VJbmFjdGl2ZVBvcHVwcwAlcy8lc18lMDhYACVzLyUwOFgAaXQgPj0gRGF0YSAmJiBpdCA8PSBEYXRhK1NpemUAaW5zZXJ0ACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoSUQvUG9wSUQgb3IgVHJlZU5vZGUvVHJlZVBvcCBNaXNtYXRjaCEiAENoZWNrU3RhY2tzU2l6ZQAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiQmVnaW5Hcm91cC9FbmRHcm91cCBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJCZWdpbk1lbnUvRW5kTWVudSBvciBCZWdpblBvcHVwL0VuZFBvcHVwIE1pc21hdGNoIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaFN0eWxlQ29sb3IvUG9wU3R5bGVDb2xvciBNaXNtYXRjaCEiACpwX2JhY2t1cCA9PSBjdXJyZW50ICYmICJQdXNoU3R5bGVWYXIvUG9wU3R5bGVWYXIgTWlzbWF0Y2ghIgAqcF9iYWNrdXAgPT0gY3VycmVudCAmJiAiUHVzaEZvbnQvUG9wRm9udCBNaXNtYXRjaCEiAEdldEJvcmRlclJlY3QAZm9udCAmJiBmb250LT5Jc0xvYWRlZCgpAFNldEN1cnJlbnRGb250AGZvbnQtPlNjYWxlID4gMC4wZgBpZHggPj0gMCAmJiBpZHggPCBJbUd1aVN0eWxlVmFyX0NvdW50XwBHZXRTdHlsZVZhckluZm8AJS4qZAAlLipmAHBvcyA8PSB0ZXh0X2xlbgBTVEJfVEVYVEVESVRfSU5TRVJUQ0hBUlMASXRlbXNDb3VudCA9PSAtMQB+SW1HdWlMaXN0Q2xpcHBlcgAjI3NlbGVjdGFibGUAIyNkdW1teXBpY2tlcgBBbHBoYSBCYXIAY29sdW1uX2luZGV4ID4gMABHZXREcmFnZ2VkQ29sdW1uT2Zmc2V0AGcuQWN0aXZlSWQgPT0gY29sdW1ucy0+SUQgKyBJbUd1aUlEKGNvbHVtbl9pbmRleCkAJXMgKCVkKQAlcyAnJXMnLCAlZCBAIDB4JXAAUG9zOiAoJS4xZiwlLjFmKSwgU2l6ZTogKCUuMWYsJS4xZiksIFNpemVDb250ZW50cyAoJS4xZiwlLjFmKQBTY3JvbGw6ICglLjJmLyUuMmYsJS4yZi8lLjJmKQBBY3RpdmU6ICVkLCBXcml0ZUFjY2Vzc2VkOiAlZABSb290V2luZG93AENoaWxkV2luZG93cwBTdG9yYWdlOiAlZCBieXRlcwAlczogJyVzJyAlZCB2dHgsICVkIGluZGljZXMsICVkIGNtZHMAQ1VSUkVOVExZIEFQUEVORElORwBDYWxsYmFjayAlcCwgdXNlcl9kYXRhICVwAERyYXcgJS00ZCAlcyB2dHgsIHRleCA9ICVwLCBjbGlwX3JlY3QgPSAoJS4wZiwlLjBmKS4uKCUuMGYsJS4wZikAaW5kZXhlZABub24taW5kZXhlZAAlcyAlMDRkIHsgcG9zID0gKCU4LjJmLCU4LjJmKSwgdXYgPSAoJS42ZiwlLjZmKSwgY29sID0gJTA4WCB9CgB2dHgAICAgAGl0ID49IERhdGEgJiYgaXQgPCBEYXRhK1NpemUAZXJhc2UAaSA8IFNpemUAb3BlcmF0b3JbXQBkcmF3X2NtZC5DbGlwUmVjdC54IDw9IGRyYXdfY21kLkNsaXBSZWN0LnogJiYgZHJhd19jbWQuQ2xpcFJlY3QueSA8PSBkcmF3X2NtZC5DbGlwUmVjdC53AGltZ3VpL2ltZ3VpX2RyYXcuY3BwAEFkZERyYXdDbWQAX0NsaXBSZWN0U3RhY2suU2l6ZSA+IDAAcG9wX2JhY2sAX1RleHR1cmVJZFN0YWNrLlNpemUgPiAwAFBvcFRleHR1cmVJRABfQ2hhbm5lbHNDdXJyZW50ID09IDAgJiYgX0NoYW5uZWxzQ291bnQgPT0gMQBDaGFubmVsc1NwbGl0AGJhY2sAaWR4IDwgX0NoYW5uZWxzQ291bnQAQ2hhbm5lbHNTZXRDdXJyZW50AGZvbnQtPkNvbnRhaW5lckF0bGFzLT5UZXhJRCA9PSBfVGV4dHVyZUlkU3RhY2suYmFjaygpAGF0bGFzLT5Db25maWdEYXRhLlNpemUgPiAwAEltRm9udEF0bGFzQnVpbGRXaXRoU3RiVHJ1ZXR5cGUAY2ZnLkRzdEZvbnQgJiYgKCFjZmcuRHN0Rm9udC0+SXNMb2FkZWQoKSB8fCBjZmcuRHN0Rm9udC0+Q29udGFpbmVyQXRsYXMgPT0gYXRsYXMpAGZvbnRfb2Zmc2V0ID49IDAAbiA9PSBmb250X2dseXBoc19jb3VudABidWZfcmVjdHNfbiA9PSB0b3RhbF9nbHlwaHNfY291bnQAYnVmX3BhY2tlZGNoYXJzX24gPT0gdG90YWxfZ2x5cGhzX2NvdW50AGJ1Zl9yYW5nZXNfbiA9PSB0b3RhbF9yYW5nZXNfY291bnQAci5Gb250LT5Db250YWluZXJBdGxhcyA9PSBhdGxhcwBJbUZvbnRBdGxhc0J1aWxkRmluaXNoAEdseXBocy5TaXplIDwgMHhGRkZGAEJ1aWxkTG9va3VwVGFibGUASW5kZXhBZHZhbmNlWC5TaXplID09IEluZGV4TG9va3VwLlNpemUAR3Jvd0luZGV4AFRleFdpZHRoID4gMCAmJiBUZXhIZWlnaHQgPiAwAENhbGNDdXN0b21SZWN0VVYAcmVjdC0+SXNQYWNrZWQoKQBhdGxhcy0+Q3VzdG9tUmVjdElkc1swXSA+PSAwAEltRm9udEF0bGFzQnVpbGRSZW5kZXJEZWZhdWx0VGV4RGF0YQByLklEID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9JRAByLldpZHRoID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9XX0hBTEYqMisxAHIuSGVpZ2h0ID09IEZPTlRfQVRMQVNfREVGQVVMVF9URVhfREFUQV9IAHIuSXNQYWNrZWQoKQBhdGxhcy0+VGV4UGl4ZWxzQWxwaGE4ICE9IDBMAC4uLSAgICAgICAgIC1YWFhYWFhYLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YWFhYWFhYICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC4uLSAgICAgICAgIC1YLi4uLi5YLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YLi4uLi5YICAgICAgICAgIC0gICAgICAgICAgWC4uLi4uWC0tLSAgICAgICAgIC1YWFguWFhYLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC1YLi4uLlggICAgICAgICAgIC0gICAgICAgICAgIFguLi4uWFggICAgICAgICAgIC0gIFguWCAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC1YLi4uWCAgICAgICAgICAgIC0gICAgICAgICAgICBYLi4uWFhYICAgICAgICAgIC0gIFguWCAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC1YLi5YLlggICAgICAgICAgIC0gICAgICAgICAgIFguWC4uWFguWCAgICAgICAgIC0gIFguWCAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC1YLlggWC5YICAgICAgICAgIC0gICAgICAgICAgWC5YIFguWFguLlggICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC1YWCAgIFguWCAgICAgICAgIC0gICAgICAgICBYLlggICBYWFguLi5YICAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICBYLlggICAgICAgIC0gICAgICAgIFguWCAgICAgIFguLi4uWCAgICAgIC0gIFguWCAgLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgWC5YICAgICAgIC0gICAgICAgWC5YICAgICAgIFguLi4uLlggICAgIC0gIFguWCAgLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgIFguWCAgICAgIC0gICAgICBYLlggICAgICAgIFguLi4uLi5YICAgIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICBYLlggICBYWC1YWCAgIFguWCAgICAgICAgIFguLi4uLi4uWCAgIC0gIFguWCAgLSAgIFguWCAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgWC5YIFguWC1YLlggWC5YICAgICAgICAgIFguLi4uLi4uLlggIC0gIFguWCAgLSAgIFguWCAgIC0gWC4uLlhYWFhYWC5YWFhYWFguLi5YIC0gICAgICAgICAgIFguWC4uWC1YLi5YLlggICAgICAgICAgIFguLi4uLi4uLi5YIC1YWFguWFhYLSAgIFguWCAgIC0gIFguLlggICAgWC5YICAgIFguLlggIC0gICAgICAgICAgICBYLi4uWC1YLi4uWCAgICAgICAgICAgIFguLi4uLi4uLi4uWC1YLi4uLi5YLSAgIFguWCAgIC0gICBYLlggICAgWC5YICAgIFguWCAgIC0gICAgICAgICAgIFguLi4uWC1YLi4uLlggICAgICAgICAgIFguLi4uLi5YWFhYWC1YWFhYWFhYLSAgIFguWCAgIC0gICAgWFggICAgWC5YICAgIFhYICAgIC0gICAgICAgICAgWC4uLi4uWC1YLi4uLi5YICAgICAgICAgIFguLi5YLi5YICAgIC0tLS0tLS0tLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gICAgICAgICAgWFhYWFhYWC1YWFhYWFhYICAgICAgICAgIFguLlggWC4uWCAgIC0gICAgICAgLVhYWFguWFhYWC0gICAgICAgWFhYWC5YWFhYICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVguWCAgWC4uWCAgIC0gICAgICAgLVguLi4uLi4uWC0gICAgICAgWC4uLi4uLi5YICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIFhYICAgIFguLlggIC0gICAgICAgLSBYLi4uLi5YIC0gICAgICAgIFguLi4uLlggICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgIFguLlggICAgICAgICAgLSAgWC4uLlggIC0gICAgICAgICBYLi4uWCAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICBYWCAgICAgICAgICAgLSAgIFguWCAgIC0gICAgICAgICAgWC5YICAgICAgICAgIC0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgIC0tLS0tLS0tLS0tLSAgICAgICAgLSAgICBYICAgIC0gICAgICAgICAgIFggICAgICAgICAgIC1YLi4uLi4uLi4uLi4uLi4uLi4uLi4uWC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWC4uLlhYWFhYWFhYWFhYWFguLi5YIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gIFguLlggICAgICAgICAgIFguLlggIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICBYLlggICAgICAgICAgIFguWCAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gICAgWFggICAgICAgICAgIFhYICAgIC0gICAgICAgICAgIABwaXhlbHNbaSpzdHJpZGVfaW5fYnl0ZXNdID09IDAAaW1ndWkvc3RiX3RydWV0eXBlLmgAc3RidHRfX3ZfcHJlZmlsdGVyAHBpeGVsc1tpXSA9PSAwAHN0YnR0X19oX3ByZWZpbHRlcgB6LT5kaXJlY3Rpb24Ac3RidHRfX3Jhc3Rlcml6ZV9zb3J0ZWRfZWRnZXMAei0+ZXkgPj0gc2Nhbl95X3RvcABlLT5leSA+PSB5X3RvcABzdGJ0dF9fZmlsbF9hY3RpdmVfZWRnZXNfbmV3AGUtPnN5IDw9IHlfYm90dG9tICYmIGUtPmV5ID49IHlfdG9wAHggPj0gMCAmJiB4IDwgbGVuAGZhYnMoYXJlYSkgPD0gMS4wMWYAeTAgPCB5MQBzdGJ0dF9faGFuZGxlX2NsaXBwZWRfZWRnZQBlLT5zeSA8PSBlLT5leQB4MSA8PSB4KzEAeDEgPj0geAB4MSA8PSB4AHgxID49IHgrMQB4MSA+PSB4ICYmIHgxIDw9IHgrMQB4MCA+PSB4ICYmIHgwIDw9IHgrMSAmJiB4MSA+PSB4ICYmIHgxIDw9IHgrMQB6ICE9IDBMAHN0YnR0X19uZXdfYWN0aXZlACFpbmZvLT5jZmYuc2l6ZQBzdGJ0dF9fR2V0R2x5Zk9mZnNldAAwAHN0YnR0X19jZmZfaW50AG4gPj0gMSAmJiBuIDw9IDQAc3RidHRfX2J1Zl9nZXQAc2l6ZSA8IDB4NDAwMDAwMDAAc3RidHRfX25ld19idWYAIShvID4gYi0+c2l6ZSB8fCBvIDwgMCkAc3RidHRfX2J1Zl9zZWVrAG9mZnNpemUgPj0gMSAmJiBvZmZzaXplIDw9IDQAc3RidHRfX2NmZl9nZXRfaW5kZXgAYjAgPj0gMjgAc3RidHRfX2NmZl9za2lwX29wZXJhbmQAaSA+PSAwICYmIGkgPCBjb3VudABzdGJ0dF9fY2ZmX2luZGV4X2dldABvdXRwdXRfY3R4Lm51bV92ZXJ0aWNlcyA9PSBjb3VudF9jdHgubnVtX3ZlcnRpY2VzAHN0YnR0X19HZXRHbHlwaFNoYXBlVDIAc3RidHRfX0dldEdseXBoU2hhcGVUVABzdGJ0dF9GaW5kR2x5cGhJbmRleAB1bmljb2RlX2NvZGVwb2ludCA8PSB0dFVTSE9SVChkYXRhICsgZW5kQ291bnQgKyAyKml0ZW0pAHdpZHRoICUgYy0+YWxpZ24gPT0gMABpbWd1aS9zdGJfcmVjdF9wYWNrLmgAc3RicnBfX3NreWxpbmVfZmluZF9iZXN0X3BvcwB4cG9zID49IDAAbm9kZS0+bmV4dC0+eCA+IHhwb3MgJiYgbm9kZS0+eCA8PSB4cG9zAGZpcnN0LT54IDw9IHgwAHN0YnJwX19za3lsaW5lX2ZpbmRfbWluX3kAbm9kZS0+bmV4dC0+eCA+IHgwAGNtYXAAbG9jYQBoZWFkAGdseWYAaGhlYQBobXR4AGtlcm4AQ0ZGIABtYXhwAHVzZXJfcmVjdHMuU2l6ZSA+PSAxAEltRm9udEF0bGFzQnVpbGRQYWNrQ3VzdG9tUmVjdHMAcGFja19yZWN0c1tpXS53ID09IHVzZXJfcmVjdHNbaV0uV2lkdGggJiYgcGFja19yZWN0c1tpXS5oID09IHVzZXJfcmVjdHNbaV0uSGVpZ2h0AGhfb3ZlcnNhbXBsZSA8PSA4AHN0YnR0X1BhY2tTZXRPdmVyc2FtcGxpbmcAdl9vdmVyc2FtcGxlIDw9IDgAd2lkdGggPD0gMHhmZmZmICYmIGhlaWdodCA8PSAweGZmZmYAc3RicnBfaW5pdF90YXJnZXQAaWQgPj0gMHgxMDAwMABBZGRDdXN0b21SZWN0UmVndWxhcgB3aWR0aCA+IDAgJiYgd2lkdGggPD0gMHhGRkZGAGhlaWdodCA+IDAgJiYgaGVpZ2h0IDw9IDB4RkZGRgBQcm9nZ3lDbGVhbi50dGYsIDEzcHgAN10pIyMjIyMjI2hWMHFzJy8jIyNbKSwjIy9sOiQjUTY+IyM1W240Mj5jLVRIYC0+PiMvZT4xMU5OVj1CdigqOi5GP3V1IyhnUlUubzBYR0hgJHZoTEcxaHh0OT9XYCMsNUxzQ3AjLWk+LnIkPCQ2cEQ+TGInOzlDcmM2dGdYbUtWZVUyY0Q0RW8zUi8yKj5dYihNQzskalBmWS47aF5gSVdNOTxMaDJUbFMrZi1zJG82UTxCV0hgWWlVLnhmTHEkTjskMGlSL0dYOlUoamNXMnAvVypxPy1xbW5VQ0k7akhTQWlGV00uUiprVUBDPUdIP2E5d3A4ZiRlLi00XlFnMSlRLUdMKGxmKHIvN0dyUmd3ViVNUz1DI2A4TkQ+UW8jdCdYIyh2I1k5dzAjMUQkQ0lmO1cnI3BXVVBYT3V4WHVVKEg5TSgxPHEtVUUzMSNeLVYnOElSVW83UWYuL0w+PUtlJCQnNUYlKV0wXiMwWEBVLmE8cjpRTHRGc0xjTDYjI2xPaikjLlk1PC1SJktnTHdxSmZMZ04mO1E/Z0leI0RZMnVMaUBeck1sOXQ9Y1dxNiMjd2VnPiRGQmpWUVRTRGdFS25JUzdFTTk+Wlk5dzAjTDs+PiNNeCY0TXZ0Ly9MW01rQSNXQGxLLk4nWzAjN1JMXyYjdytGJUh0RzlNI1hMYE4mLixHTTRQZzstPG5MRU5odng+LVZzTS5NMHJKZkxIMmVUTWAqb0pNSFJDYE5rZmltTTJKLFctalhTOilyMHdLI0BGZ2UkVT5gdydON0cjJCNmQiMkRV4kIzo5OmhrK2VPZS0tNngpRjcqRSU/NzYlXkdNSGVQVy1aNWwnJkdpRiMkOTU2OnJTP2RBI2ZpSzopWXIrYCYjMGpAJ0RiRyYjXiRQRy5MbCtETmE8WENNS0VWKk4pTE4vTipiPSVRNnBpYS1YZzhJJDxNUiYsVmRKZSQ8KDdHO0NrbCcmaEY7OyQ8Xz1YKGIuUlMlJSkjIyNNUEJ1dUUxVjp2JmNYJiMybSMoJmNWXWBrOU9oTE1ibiVzJEcyLEIkQmZEM1gqc3A1I2wsJFIjXXhfWDF4S1glYjVVKltyNWlNZlVvOVVgTjk5aEcpdG0rL1VzOXBHKVhQdWA8MHMtKVdUdChnQ1J4SWcoJTZzZmg9a3RNS24zaik8NjxiNVNrXy8wKF5dQWFOIyhwL0w+JlZaPjFpJWgxUzl1NW9AWWFhVyRlK2I8VFdGbi9aOk9oKEN4MiRsTkVvTl5lKSNDRllAQEk7Qk9RKnNSd1p0WnhSY1U3dVc2Q1hvdzBpKD8kUVtjak9kW1A0ZCldPlJPUE9weFRPN1N0d2kxOjppQjFxKUNfPWRWMjZKOzIsXTdvcCRddVFyQF9WNyRxXiVsUXd0dUhZXT1EWCxuM0wjMFBIRE80Zjk+ZENATz5IQnVLUHBQKkUsTitiM0wjbHBSL01yVEVILklBUWsuYT5EWy5lO21jLnhdSXAuUEheJy9hcVVPLyQxV3hMb1cwW2lMQTxRVDs1SEtEK0BxUSdOUSgzX1BMaEU0OFIucUFQU3dRMC9XSz9aLFt4Py1KO2pRVFdBMFhAS0ooX1k4Ti06L003NDovLVpwS3JVc3M/ZCNkWnFdREFia1UqSnFrTCtud1hAQDQ3YDU+dz00aCg5LmBHQ1JVeEhQZVJgNU1qb2woZFVXeFphKD5TVHJQa3JKaVd4YDVVN0YjLmcqanJvaEdnYGNnOmxTVHZFWS9FVl83SDRROVtaJWNudjtKUVlaNXEubDdaZWFzOkhPSVpPQj9HPE5hbGQkcXNdQF1MPEo3YlIqPmd2Ols3TUkyaykuJzIoJDVGTlAmRVEoLClVXVddK2ZoMTgudnNhaTAwKTtEM0A0a3U1UD9EUDhhSnQrO3FVTV09K2InOEA7bVZpQkt4MERFWy1hdUdsODpQSiZEaitNNk9DXU9eKCgjI11gMGkpZHJUOy03WGA9LUgzW2lnVW5QRy1OWmxvLiNrQGgjPU9yayRtPmE+JC0/VG0kVVYoPyNQNllZIycvIyMjeGU3cS43M3JJMypwUC8kMT5zOSlXLEpyTTdTTl0nLzRDI3YkVWAwI1YuWzA+eFFzSCRmRW1QTWdZMnU3S2goRyVzaUlmTFNvUytNSzJlVE0kPTUsTThwYEEuO19SJSN1W0sjJHg0QUc4LmtLL0hTQj09LSdJZS9RVHRHPy0uKl5OLTRCL1pNXzNZbFFDNyhwN3EpJl0oYDZfYykkLypKTChMLV4oXSR3SU1gZFB0T2RHQSxVMzp3Mk0tMDxxLV1MXz9eKTF2dycuLE1Sc3FWci5MO2FOJiMvRWdKKVBCY1stZj4rV29tWDJ1N2xxTTJpRXVtTVRjc0Y/LWFUPVotOTdVRW5YZ2xFbjFLLWJuRU9gZ3VGdChjJT07QW1fUXNAakxvb0kmTlg7XTAjajQjRjE0O2dsOC1HUXBnd2hycTgnPWxfZi1iNDknVU9xa0x1Ny0jI29EWTJMKHRlK01jaCZnTFl0SixNRXRKZkxoJ3gnTT0kQ1MtWlolUF04Ylo+I1M/WVkjJVEmcSczXkZ3Jj9EKVVETnJvY00zQTc2Ly9vTD8jaDdnbDg1W3FXL05ET2slMTZpajsrOjFhJ2lOSWRiLW91OC5QKncsdjUjRUkkVFdTPlBvdC1SKkgnLVNFcEE6ZylmK08kJSVga0EjRz04Uk1tRzEmT2A+dG84YkNdVCYkLG4uTG9PPjI5c3AzZHQtNTJVJVZNI3E3J0RIcGcrI1o5JUhbSzxMJWEyRS1ncldWTTNAMj0tazIydExdNCQjIzZXZSc4VUpDS0VbZF89JXdJOyc2WC1Hc0xYNGpeU2dKJCMjUip3LHZQM3dLI2lpVyYjKmheRCZSP2pwNysvdSYjKEFQIyNYVThjJGZTWVctSjk1Xy1EcFtnOXdjTyYjTS1oMU9jSmxjLSp2cHcweFVYJiNPUUZLTlhAUUknSW9QcDduYixRVS8vTVEmWkRrS1ApWDxXU1ZMKDY4dVZsJiNjJ1swIyhzMVgmeG0kWSVCNypLOmVEQTMyM2o5OThHWGJBI3B3TXMtamdEJDlRSVNCLUFfKGFONHhvRk1eQEM1OEQwK1ErcTNuMCMzVTFJbkRqRjY4Mi1Tak1YSkspKGgkaHh1YV9LXXVsOTIlJ0JPVSYjQlJSaC1zbGc4S0RscjolTDcxS2E6LkE7JVlVTGpEUG1MPExZczhpI1h3Sk9ZYUtQS2MxaDonOUtlLGcpYiksNzg9STM5Qjt4aVkkYmdHdy0mLlppOUluWER1WWElRypmMkJxN21uOV4jcDF2diUjKFdpLTsvWjVobzsjMjo7JWQmI3g5djY4QzVnP250WDBYKXBUYDslcEIzcTdtZ0dOKTMlKFA4blRkNUw3R2VBLUdMQCslSjN1MjooWWY+ZXRgZTspZiNLbTgmK0RDJEk0Nj4jS3JdXXUtWz05OXR0czEucWIjcTcyZzFXSk84MXErZU4nMDMnZU0+JjFYeFktY2FFbk9qJTJuOCkpLD9JTFI1Xi5JYm48LVgtTXE3W2E4MkxxOkYmI2NlK1M5d3NDSyp4YDU2OUU4ZXcnSGVdaDpzSVsyTE0kW2d1a2EzWlJkNjp0JUlHOjskJVlpSjpOcT0/ZUF3Oy86bm5EcTAoQ1ljTXBHKXFMTjQkIyMmSjxqJFVwSzxRNGExXU11cFdeLXNqXyQlW0hLJSdGIyMjI1FSWko6OlkzRUdsNCdAJUZraUFPZyNwWyMjT2BndWtUZkJIYWdMPExIdyVxJk9WMCMjRj02LzpjaEltMEBlQ1A4WF06a0ZJJWhsOGhnT0BSY0JoUy1AUWIkJSttPWhQRExnKiVLOGxuKHdjZjMvJ0RXLSQubFI/bltuQ0gtZVhPT05USmxoOi5SWUYlMydwNnNxOlVJTUE5NDUmXkhGUzg3QCRFUDJpRzwtbENPJCVjYHVLR0QzckMkeDBCTDhhRm4tLWBrZSUjSE1QJ3ZoMS9SJk9fSjkndW0sLjx0eFtAJXdzSmsmYlVUMmAwdU12N2dnI3FwL2lqLkw1NidobDsuczVDVXJ4ak9NNy0jIy5sK0F1J0EmTzotVDcyTF1QYCY9O2N0cCdYU2NYKnJVLj4tWFR0LCVPVlU0KVMxK1ItI2RnMC9Obj9LdTFeMGYkQipQOlJvd3dtLWAwUEtqWURETSczXWQzOVZaSEVsNCwuaiddUGstTS5oXiY6MEZBQ20kbWFxLSZzZ3cwdDcvNiheeHRrJUx1SDg4RmotZWttPkdBI18+NTY4eDYoT0ZSbC1JWnBgJmIsX1AnJE08Sm5xNzlWc0pXL21XUypQVWlxNzY7XS9OTV8+aExieGZjJG1qYCxPOyYlVzJtYFpoOi8pVWV0dzphSiVdSzloOlRjRl11Xy1TajksVkszTS4qJyYwRFtDYV1KOWdwOCxrQVddJSg/QSVSJGY8LT5adHMnXmtuPS1eQGM0JS1wWTZxSSVKJTFJR3hmTFU5Q1A4Y2JQbFh2KTtDPWIpLDwybU92UDh1cCxVVmYzODM5YWNBV0FXLVc/I2FvL14jJUtZbzhmUlVMTmQyLj4lbV1VSzpuJXIkJ3N3XUo7NXBBb09fIzJtTzNuLCc9SDUoZXRIZypgK1JMZ3Y+PTRVOGd1RCRJJUQ6Vz4tcjVWKiVqKlc6S3Zlai5McCQ8TS1TR1onOitRX2srdXZPU0xpRW8oPGFEL0s8Q0NjYCdMeD4nPzsrK08nPigpakxSLV51NjhQSG04WkZXZStlajhoOjlyNkwqMC8vYyZpSCZSOHBSYkEjS2ptJXVwVjFnOmFfI1VyN0Z1QSModFJoIy5ZNUsrQD8zPC04bTAkUEVuO0o6cmg2P0k2dUc8LWB3TVUnaXJjcDBMYUVfT3RsTWImMSM2VC4jRkRLdSMxTHcldSUrR00rWCdlP1lMZmpNW1ZPME1idUZwNzs+USYjV0lvKTBARiVxN2MjNFhBWE4tVSZWQjxIRkYqcUwoJC9WLDsoa1haZWpXT2A8WzU/P2V3WSgqOT0ld0RjOyx1PCc5dDNXLShIMXRoMytHXXVjUV1rTHM3ZGYoJC8qSkxdQCp0N0J1X0czXzdtcDc8aWFRak9ALmtMZzt4M0IwbHFwN0hmLF5aZTctIyNAL2M1OE1vKDM7a25wMCUpQTc/LVcrZUknbzgpYjxuS253J0hvOEM9WT5wcUI+MGllJmpoWls/aUxSQEBfQXZBLWlRQyg9a3NSWlJWcDdgLj0rTnBCQyVyaCYzXVI6OFhEbUU1XlY4Tyh4PDxhRy8xTiQjRlgkMFY1WTZ4J2FFckkzSSQ3eCVFYHY8LUJZLCklLT9Qc2YqbD8lQzMubU0oPS9NMDpKeEcnPzdXaEglbydhPC04MGcwTkJ4b08oR0g8ZE1dbi4rJXFAakg/Zi5Vc0oyR2dzJjQ8LWU0NyZLbCtmLy85QGBiKz8uVGVOXyZCOFNzP3Y7XlRyaztmI1l2SmtsJnckXT4tK2s/Jyg8Uzo2OHRxKldvRGZadSc7bU0/OFhbbWE4VyUqYC09O0QuKG5jNy87KWc6VDE9XkokJkJSVigtbFRtTkI2eHFCW0AwKm8uZXJNKjxTV0ZddTI9c3QtKig2dj5eXShILmFSRVpTaSwjMTpbSVhhWkZPbTwtdWkjcVVxMiQjI1JpO3U3NU9LIyhSdGFXLUstRmBTK2NGXXVOYC1LTVElclAvWHJpLkxSY0IjIz1ZTDNCZ00vM01EP0BmJjEnQlctKUp1PEwyNWdsOHVoVm0xaEwkIyMqOCMjIydBMy9Ma0tXKyhecldYPzVXXzhnKWEobSZLOFA+I2JtbVdDTWtrJiNUUmBDLDVkPmcpRjt0LDQ6QF9sOEcvNWg0dlVkJSYlOTUwOlZYRCdRZFdvWS1GJEJ0VXdtZmUkWXFMJzgoUFdYKFA/XkBQbzMkIyNgTVNzP0RXQlovUz4rNCU+ZlgsVld2L3cnS0RgTFA1SWJIO3JUVj5uM2NFSzhVI2JYXWwtL1YrXmxqMzt2bE1iJls1WVE4I3Bla1g5SlAzWFVDNzJMLCw/K05pJmNvN0Fwbk8qNU5LLCgoVy1pOiQsa3AnVURBTyhHMFNxN01WakpzYkl1KSdaLCpbPmJyNWZYXjpGUEFXci1tMktnTDxMVU4wOThrVEYmI2x2bzU4PS92akRvOy47KUthKmhMUiMvaz1yS2J4dVZgPlFfbk42Jzh1VEcmIzFUNWcpdUx2Ojg3M1VwVExnSCsjRmdwSCdfbzE3ODBQaDhLbXhRSjgjSDcyTDRANzY4QFRtJlFoNENCLzVPdm1BJixRJlFiVW9pJGFfJTNNMDFIKTR4N0leJktRVmd0Rm5WKztbUGM+W200ay8vLF0xPyNgVllbSnIqMyYmc2xSZkxpVlpKOl0/PUszU3c9WyQ9dVJCPzN4azQ4QGFlZzxaJzwkIzRIKTYsPmUwalQ2J04jKHElLk89PzJTXXUqKG08LVY4SicoMSlHXVs2OGhXJDUncVtHQyY1amBURT9tJ2VzRkdOUk0paixmZlo/LXF4ODstPmc0dCo6Q0lQL1tRYXA3LzknIygxc2FvN3ctLnFOVWRrSil0Q0YmI0JeO3hHdm4ycjlGRVBGRkZjTEAuaUZOa1R2ZSRtJSNRdlFTOFVAKTJaKzNLOkFLTTVpc1o4OCtkS1EpVzY+SiVDTDxLRT5gLmQqKEJgLW44RDlvSzxVcF1jJFgkKCwpTThadDcvW3Jka3FUZ2wtMGN1R012Jz8+LVhWMXFbJy01aydjQVo2OWU7RF8/JFpQUCZzXis3XSkkKiQjQFFZaTksNVAmIzlyKyQlQ0U9Njg+SzhyMD1kU0MlJShAcDcubTdqaWxRMDInMC1WV0FnPGEvJyczdS49NEwkWSk2ay9LOl9bMz0manZMPEwwQy8yJ3Y6XjstRElCVyxCNEU2ODprWjslPzgoUThCSD1rTzY1Qlc/eFNHJiNAdVUsRFMqLD8uKyhvKCMxdkNTOCNDSEY+VGxHVydiKVRxN1ZUOXFeKl4kJC46Jk5AQCQmKVdIdFBtKjVfck8wJmUlSyYjLTMwaihFNCMnWmIuby8oVHBtJD5LJ2ZAW1B2RmwsaGZJTlROVTZ1JzBwYW83JVhVcDldNS4+JWhgOF89VllieHVlbC5OVFNzSmZMYWNGdTNCJ2xRU3UvbTYtT3FlbThUK29FLS0kMGEva111ajlFd3NHPiV2ZVIqaHZeQkZwUWo6SycjU0osc0ItJyNdKGouTGc5MnJUdy0qbiVALzszOXJySkYsbCNxViVPcnRCZUM2Lyw7cUIzZWJOV1s/LEhxajJMLjFOUCZHalVSPTFEOFFhUzNVcCZAKjl3UD8rbG83Yj9AJSdrNGBwMFokMjIlSzMraUNaaj9YSk40Tm0mK1lGXXVALVckVSVWRVEvLCw+PiMpRDxoI2ApaDA6PFE2OTA5dWErJlZVJW4yOmNHM0ZKLSVAQmotRGdMcmBIdyZIQUtqS2pzZUs8L3hLVCopQixOOVgzXWtyYzEydCdwZ1RWKEx2LXRMW3hnXyU9TV9xN2FeeD83VWJkPiMlOGNZI1laPz0sYFdkeHUvYWUmI3c2KVI4OXRJIzZAcycoNkJmN2EmP1M9XlpJX2tTJmFpYCY9dEU3MkxfRCw7XlIpN1skczxFaCNjJilxLk1YSSUjdjlST2E1RlpPJXNGN3E3TndiJiNwdFVKOmFxSmUkU2w2OCUuRCMjI0VDPjw/LWFGJiNSTlF2Pm84bEtOJTUvJCh2ZGZxNytlYkEjdTFwXW92VUtXJlklcV0nPiQxQC1beGZuJDdaVHA3bU0sRyxLbzdhJkd1JUdbUk14SnNbME1NJXdjaS5MRkRLKSg8Y2BROE4pakVJRiorP1AyYThnJSkkcV1vMmFIOEMmPFNpYkMvcSwoZTp2Oy1iIzZbJE50RFo4NEplMktOdkIjJFA1P3RRM250KDBkPWouTFFmLi9MbDMzKyg7cTNMLXc9OGRYJCNXRiZ1SUpALWJmST4lOl9pMkI1Q3NSOCY5WiYjPW1QRW5tMGZgPCZjKVFMNXVKIyV1JWxKaitELXI7Qm9GJiM0RG9TOTdoNWcpRSNvOiZTNHdlREYsOV5Ib2VgaCpMK19hKk5yTFctMXBHXyYyVWRCODZlJUIvOj0+KU40eGVXLip3ZnQtOyQnNTgtRVNxcjxiP1VJKF8lQFtQNDY+I1VgJzZBUV1tJjYvYFo+I1M/WVkjVmM7cjdVMiYzMjZkPXcmSCMjIyM/VFpgKjQ/Ji5NSz9MUDhWeGc+JFtRWGMlUUp2OTIuKERiKkIpZ2IqQk05ZE0qaEpNQW8qYyYjYjB2PVBqZXJdJGdHJkpYRGYtPidTdHZVNzUwNWw5JEFGdmdZUkleJjxeYjY4P2ojcTlRWDRTTSdSTyMmc0wxSU0uckpmTFVBajIyMV1kIyNEVz1tODN1NTsnYll4LCpTbDBoTChXOzskZG9CJk8vVFE6KFpeeEJkTGpMPExuaTsnJ1guYCQjOCsxR0Q6ayRZVVdzYm44b2doNnJ4WjJaOV0lbmQrPlYjKjhVXzcyTGgrMlE4Q2owaTo2aHAmJEMvOnAoSEs+VDhZW2dIUTRgNCknJEFiKE5vZiVWJzhoTCYjPE5FZHRnKG4nPVMxQShRMS9JJjQoWyVkTWAsSXUnMTpfaEw+U2ZEMDcmNkQ8ZnA4ZEhNNy9nK3RsUE45SipyS2FQY3QmPyd1QkNlbV5qbiU5X0spPCxDNUszcz01ZyZHbUpiKltTWXE3SztUUkxHQ3NNLSQkO1MlOllAcjdBSzBwcHJwTDxMcmgscTdlLyVLV0s6NTBJXittJ3ZpYDM/JVpwKzwtZCskTC1TdjpALm8xOW4kczAmMzk7a247UyVCU3EqJDNXb0pTQ0x3ZVZbYVonTVFJak88NztYLVg7JitkTUx2dSNeVXNHRUM5V0VjW1god0k3IzIuKEYwalYqZVpmPC1RdjNKLWMrSjVBbHJCIyRwKEg2OEx2RUEncTNuMCNtLFtgKjhGdClGY1lnRXVkXUNXZm02OCwoYUxBJEBFRlRnTFhvQnEvVVBscDc6ZFsvO3JfaXg9OlRGYFM1SC1iPExJJkhZKEs9aCMpXUxrJEsxNGxWZm06eCRIPDNeUWw8TWAkT2hhcEJua3VwJ0QjTCRQYl9gTipnXTJlO1gvRHRnLGJzaiZLIzJbLTppWXInX3dnSClOVUlSOGExbiNTP1llaidoOF41OFViWmQrXkZLRCpUQDs2QTdhUUNbSzhkLSh2NkdJJHg6VDwmJ0dwNVVmPkBNLipKOjskLXJ2MjknTV04cU12LXRMcCwnODg2aWFDPUhiKllKb0tKLChqJUs9SGBLLnY5SGdncUJJaVp1J1F2QlQuIz0pMHVrcnVWJi4pMz0oXjFgbypQajQ8LTxhTigoXjcoJyNaMHdLIzVHWEA3dV1bYCpTXjQzOTMzQTRybF1bYCpPNENnTEVsXXYkMVEzQWVGMzdkYlhrLC4pdmojeCdkYDtxZ2JRUiVGVywyKD9MTz1zJVNjNjglTlAnIyNBb3RsOHg9QkUjajFVRChbMyRNKF1VSTJMWDNScEtOQDsvI2YnZi8mX210JkYpWGRGPDl0NClRYS4qa1RMd1EnKFRUQjkueEgnPiNNSitnTHE5LSMjQEh1WlBOMF11Omg3LlQuLkc6OyQvVXNqKFQ3YFE4dFQ3MkxuWWw8LXF4ODstSFY3US0mWGR4JTFhLGhDPTB1K0hsc1Y+bnVJUUwtNTxOPylOQlMpUU4qX0ksPyYpMidJTSVMM0kpWCgoZS9kbDImOCc8TTpeI00qUStbVC5YcmkuTFlTM3YlZkZgNjhoO2ItWFsvRW4nQ1IucTdFKXAnL2tsZTJITSx1O14lT0tDLU4rTGwlRjlDRjxOZideI3QyTCw7MjdXOjBPQDYjI1U2Vzc6JHJKZkxXSGokIyl3b3FCZWZJWi5QSzxiKnQ3ZWQ7cCpfbTs0RXhLI2hAJl0+Xz5Aa1hRdE1hY2ZELm0tVkFiODtJUmVNMyR3ZjAnJ2hyYSpzbzU2OCdJcCZ2UnM4NDknTVJZU3AlOnQ6aDVxU2d3cEVyJEI+USw7cyhDIyQpYHN2UXVGJCMjLUQsIyMsZzY4QDJbVDsuWFNkTjlRZSlycHQuX0stIzV3RilzUCcjI3AjQzBjJS1HYiVoZCs8LWonQWkqeCYmSE1rVF1DJ09TbCMjNVJHW0pYYUhOO2QndUEjeC5fVTsuYFBVQChaM2R0NHIxNTJAOnYsJ1IuU2ondyMwPC07a1BJKUZmSiYjQVlKJiMvLyk+LWs9bT0qWG5LJD49KTcyTF0wSSU+Lkc2OTBhOiQjIzwsKTs/OzcyIz94OStkO15WJzk7allAOyliciNxXllRcHg6WCNUZSRaXic9LT1iR2hMZjpENiZiTndaOS1aRCNuXjlIaExNcjVHOyddZCY2J3dZbVRGbUw8TEQpRl4lW3RDJzg7KzlFI0MkZyUjNVk+cTl3ST5QKDltSVs+a0MtZWtMQy9SJkNIK3MnQjtLLU02JEVCJWlzMDA6K0E0Wzd4a3MuTHJOazAmRSl3SUxZRkAyTCcwTmIkK3B2PCgyLjc2OC9GclkmaCReM2kmQCtHJUpUJzwtLHZgMztfKUk5TV5BRV1DTj9DbDJBWmcrJTRpVHBUMzxuLSYlSCViPEZEajJNPGhIPSZFaDwyTGVuJGIqYVRYPS04UXhOKWsxMUlNMWNeaiU5czxMPE5GU28pQj8rPC0oR3hzRixeLUVoQCQ0ZFhoTiQrI3J4SzgnamUnRDdrYGU7KTJwWXdQQSdfcDkmQF4xOG1sMV5bQGc0dCpbSk9hKls9UXA3KHFKX29PTF4oJzdmQiZIcS06c2Ysc05qOHhxXj4kVTRPXUdLeCdtOSliQHA3WXN2SzN3XllSLUNkUSo6SXI8KCR1JikjKCY/TDlSZzNIKTRmaUVwXmlJOU84S25UaixdSD9EKnI3J007UHdaOUswRV5rJi1jcEk7LnAvNl92d29GTVY8LT4jJVhpLkx4Vm5yVSg0JjgvUCs6aExTS2okI1UlXTQ5dCdJOnJnTWknRkxAYTowWS11QVszOScsKHZibWEqaFUlPC1TUkZgVHQ6NTQyUl9WViRwQFtwOERWW0EsPzE4MzlGV2RGPFRkZEY8OUFoLTYmOXRXb0RsaF0mMVNwR01xPlRpMU8qSCYjKEFMOFtfUCUuTT52Xi0pKXFPVCpGNUNxMGBZZSUrJEI2aTo3QDBJWDxOK1QrME1sTUJQUSpWaj5Tc0Q8VTRKSFk4a0QyKTJmVS9NIyRlLilUNCxfPThoTGltWyYpOz9Va0snLXg/Jyg6c2lJZkw8JHBGTWBpPD8lVyhtR0RITSU+aVdQLCMjUGAlL0w8ZVhpOkBaOUMuN289QChwWGRBTy9OTFE4bFBsK0hQT1FhOHdEOD1eR2xQYThUS0kxQ2poc0NUU0xKTScvV2w+LVMocXclc2YvQCUjQjY7L1U3S111WmJpXk9jXjJuPGJoUG1Va013PiV0PCknbUVWRScnbmBXbkpyYSReVEt2WDVCPjtfYVNFSycsKGh3YTA6aTRHPy5CY2kuKFhbP2IqKCQsPS1uPC5RJWAoWD0/K0BBbSpKczAmPTNiaDhLXW1MPExvTnMnNiwnODVgMD90LydfVTU5QF1kZEY8I0xkRjxlV2RGPE91Ti80NXJZPC1MQCYjK2ZtPjY5PUxiLE9jWlYvKTtUVG04Vkk7PyVPdEo8KGI0bXE3TTY6dT9LUmRGPGdSQDJMPUZOVS08YlsoOWMvTUwzbTtaWyRvRjNnKUdBV3FwQVJjPTxST3U3Y0w1bDstW0FdJS8rZnNkO2wjU2FmVC9mKlddMD1PJyQoVGI8WykqQGU3NzVSLTpZb2IlZyo+bCo6eFA/WWIuNSkld19JPzd1azVKQytGUyhtI2knay4nYTBpKTk8N2InZnMnNTlocSQqNVVodiMjcGleOCtoSUVCRmBudm9gOydsMC5eUzE8LXdVSzIvQ29oNThLS2hMak09U08qcmZPYCtxQ2BXLU9uLj1BSjU2Pj5pMkAyTEg2QTomNXFgPzlJM0BAJzA0JnAyL0xWYSpULTQ8LWkzO005VXZaZCtONz5iKmVJd2c6Q0MpYzw+bk8mIzxJR2U7X18udGhqWmw8JXcoV2syeG1wNFFASSNJOSxERl11Ny1QPS4tXzpZSl1hU0BWPzYqQygpZE9wNzpXTCxiJjNSZy8uY21NOSZyXj4kKD4uWi1JJkooUTBIZDVRJTdDby1iYC1jPE4oNnJAaXArQXVySzxtODZRSXRoKiN2Oy1PQnFpK0w3d0RFLUlyOEtbJ20rRERTTHdLJi8uPy1WJVVfJTM6cUtOdSRfYipCLWtwN05hRCdRZFdRUEtZcVtAPlApaEk7Kl9GXXVgUmJbLmo4X1EvPCY+dXUrVnNIJHNNOVRBJT8pKHZtSjgwKSxQN0U+KXRqRCUyTD0tdCNmS1slYHY9UTg8RmZOa2dnXm9JYmFoKiM4L1F0JEYmOksqLShOLycrMXZNQix1KCktYS5WVVUqI1tlJWdBQU8oUz5XbEEyKTtTYT5nWG04WUJgMWRASyNuXTc2LWEkVSxtRjxmWF1pZHFkKTwzLF1KN0ptVzRgNl11a3M9NC03MkwoakVrKzpiSjBNXnEtOERtX1o/MG9sUDFDOVNhJkhbZCZjJG9vUVVqXUV4ZCozWk1ALVdHVzIlcycsQi1fTSU+JVVsOiMvJ3hvRk05UVgtJC5RTic+WyUkWiR1RjZwQTZLaTJPNTo4dyp2UDE8LTFgW0csKS1tIz4wYFAmI2ViIy4zaSlydEI2MShvJyQ/WDNCPC9SOTA7ZVpdJU5jcTstVGxdI0Y+MlFmdF5hZV81dEtMOU1VZTliKnNMRVE5NUMmYD1HP0BNaj13aConM0U+PS08KUd0Kkl3KSdRRzpgQEl3T2Y3Jl0xaSdTMDFCK0V2L05hYyM5Uzs9O1lRcGdfNlVgKmtWWTM5eEssWy82QWo3OicxQm0tXzFFWWZhMStvJm80aHA3S05fUShPbElvQFMlO2pWZG4wJzE8VmM1Mj11YDNeby1uMSdnNHY1OEhqJjZfdDckIyM/TSljPCRiZ1FfJ1NZKCgteGtBI1koLHAnSDlySVZZLWIsJyViQ1BGNy5KPFVwXiwoZFUxVlkqNSNXa1RVPmgxOXcsV1FoTEkpM1MjZiQyKGViLGpyKmI7M1Z3XSo3TkglJGM0VnMsZUQ5PlhXOD9OXW8rKCpwZ0MlLzcyTFYtdTxIcCwzQGVeOVVCMUorYWs5LVROL21oS1BnK0FKWWQkTWx2QUZfakNLKi5PLV4oNjNhZE1ULT5XJWlld1M4VzZtMnJ0Q3BvJ1JTMVI4ND1AcGFUS3QpPj0lJjFbKSp2cCd1K3gsVnJ3TjsmXWt1TzlKRGJnPXBPJEoqLmpWZTt1J20wZHI5bCw8KndNSypPZT1nOGxWX0tFQkZrTydvVV1ePVstNzkyI29rLClpXWxSOHFRMm9BOHdjUkNaXjd3L05qaDs/LnN0WD9RMT5TMXE0Qm4kKUsxPC1yR2RPJyRXci5MYy5DRykkLypKTDR0TlIvLFNWTzMsYVV3J0RKTjopU3M7d0duOUEzMmlqdyVGTCtaMEZuLlU5O3JlU3EpYm1JMzJVPT01QUx1RyYjVmYxMzk4L3BWbzEqYy0oYVkxNjhvPGBKc1Niay0sMU47JD4wOk9VYXMoMzo4Wjk3MkxTZkY4ZWI9Yy07PlNQdzcuNmhuM21gOV5Ya24oci5xU1swO1QlJlFjPStTVFJ4WCdxMUJOazMmKmV1MjsmOHEkJng+USNRN15UZis2PChkJVpWbWoyYkRpJS4zTDJuKzRXJyRQaURERylnLHIlKz8sJEA/dW91NXRTZTJhTl9BUVUqPGhgZS1HSTcpP09LMkEuZDdfYyk/d1E1QVNAREwzciM3ZlNrZ2w2LSsrRDonQSx1cTdTdmxCJHBjcEgncTNuMCNfJWRZI3hDcHItbDxGME5SQC0jI0ZFVjZOVEY2IyMkbDg0TjF3P0FPPidJQU9VUlEjI1ZeRnYtWEZiR003RmwoTjwzRGhMR0YlcS4xckMkIzpUX18mUGk2OCUweGlfJltxRkooNzdqXyZKV29GLlY3MzUmVCxbUio6eEZSKks1Pj4jYGJXLT80TmVfJjZOZV8mNk5lXyZuYGtyLSNHSmNNNlg7dU02WDt1TSguYS4uXjJUa0wlb1IoIzt1LlQlZkFyJTR0SjgmPjwxPUdIWl8rbTkvI0gxRl5SI1NDIypOPUJBOShEP3ZbVWlGWT4+XjhwLEtLRi5XXUwyOXVMa0xsdS8rNFQ8WG9JQiZoeD1UMVBjRGFCJjtISCstQUZyPyhtOUhaVilGS1M4SkN3O1NEPTZbXi9EWlVMYEVVRGZdR0dsRyY+dyQpRi4vXm4zK3JsbytEQjs1c0lZR05rK2kxdC02OUpnLS0wcGFvN1NtI0spcGRIVyY7THVETkhASD4jL1gtVEkoO1A+IyxHYz4jMFN1PiM0YDE/IzhsQz8jPHhVPyNALmk/I0Q6JUAjSEY3QCNMUklAI1BfW0AjVGtuQCNYdypBI10tPUEjYTlPQSNkPEYmIyo7RyMjLkdZIyMyU2wjIzZgKCQjOmw6JCM+eEwkI0IuYCQjRjpyJCNKRi4lI05SQCUjUl9SJSNWa2UlI1p3dyUjXy00JiMzXlJoJVNmbHItaydNUy5vPy41L3NXZWwvd3BFTTAlMycvMSlLXmYxLWQ+RzIxJnYoMzU+VmAzOVY3QTQ9b254NEExT1k1RUkwOzZJYmdyNk0kSFM3UTwpNThDNXcsO1dvQSojWyVUKiNgMWcqI2Q9IysjaEk1KyNsVUcrI3BiWSsjdG5sKyN4JCksIyYxOywjKj1NLCMuSWAsIzJVciwjNmIuLSM7d1tII2lRdEEjbV4wQiNxakJCI3V2VEIjIy1oQiMnOSRDIytFNkMjL1FIQyMzXlpDIzdqbUMjO3YpRCM/LDxEI0M4TkQjR0RhRCNLUHNEI09dL0UjZzFBNSNLQSoxI2dDMTcjTUdkOyM4KDAyI0wtZDMjcldNNCNIZ2ExIyw8dzAjVC5qPCNPIycyI0NZTjEjcWFeOiNfNG0zI29ALz0jZUc4PSN0OEo1I2ArNzgjNHVJLSNtM0IyI1NCWzgjUTBAOCNpWyo5I2lPbjgjMU5tOyNec045I3FoPDkjOj14LSNQO0syIyQlWDkjYkMrLiNSZzs8I21OPS4jTVRGLiNSWk8uIzI/KTQjWSMoLyNbKTEvI2I7TC8jZEFVLyMwU3Y7I2xZJDAjbmAtMCNzZjYwIyhGMjQjd3JIMCMlL2UwI1RtRDwjJUpTTUZvdmU6Q1RCRVhJOjxlaDJnKUIsM2gyXkczaTsjZDNqRD4pNGtNWUQ0bFZ1YDRtYDomNW5pVUE1QChBNUJBMV1QQkI6eGxCQ0M9MkNETFhNQ0VVdGlDZiYwZzIndE4/UEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQR1Q0Q1BHVDRDUEdUNENQLXFla0NgLjlrRWdeK0Yka3dWaUZKVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVLVEImNUtUQiY1S1RCJjVvLF48LTI4WkknTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cE8/O3hwTz87eHBPPzt4cDs3cS0jbExZSTp4dkQ9IwBmb250X2NmZy5Gb250RGF0YSA9PSAwTABBZGRGb250RnJvbU1lbW9yeUNvbXByZXNzZWRUVEYAQWRkRm9udEZyb21NZW1vcnlUVEYAZm9udF9jZmctPkZvbnREYXRhICE9IDBMICYmIGZvbnRfY2ZnLT5Gb250RGF0YVNpemUgPiAwAEFkZEZvbnQAZm9udF9jZmctPlNpemVQaXhlbHMgPiAwLjBmACFGb250cy5lbXB0eSgpAHN0Yl9fZG91dCA9PSBvdXRwdXQgKyBvbGVuAHN0Yl9kZWNvbXByZXNzAHN0Yl9fZG91dCA8PSBvdXRwdXQgKyBvbGVuAHN0Yl9fZG91dCArIGxlbmd0aCA8PSBzdGJfX2JhcnJpZXIAc3RiX19saXQAc3RiX19tYXRjaAAxLjUzAElNR1VJX1ZFUlNJT04ASW1EcmF3VmVydFNpemUASW1EcmF3SWR4U2l6ZQBJbURyYXdWZXJ0UG9zT2Zmc2V0AEltRHJhd1ZlcnRVVk9mZnNldABJbURyYXdWZXJ0Q29sT2Zmc2V0AEdldElPAEdldFN0eWxlAEdldERyYXdEYXRhAE5ld0ZyYW1lAFJlbmRlcgBFbmRGcmFtZQBTaHV0ZG93bgBTaG93RGVtb1dpbmRvdwBTaG93TWV0cmljc1dpbmRvdwBTaG93U3R5bGVFZGl0b3IAU2hvd1N0eWxlU2VsZWN0b3IAU2hvd0ZvbnRTZWxlY3RvcgBTaG93VXNlckd1aWRlAEJlZ2luAEVuZABCZWdpbkNoaWxkAEVuZENoaWxkAEdldENvbnRlbnRSZWdpb25NYXgAR2V0Q29udGVudFJlZ2lvbkF2YWlsAEdldENvbnRlbnRSZWdpb25BdmFpbFdpZHRoAEdldFdpbmRvd0NvbnRlbnRSZWdpb25NaW4AR2V0V2luZG93Q29udGVudFJlZ2lvbk1heABHZXRXaW5kb3dDb250ZW50UmVnaW9uV2lkdGgAR2V0V2luZG93RHJhd0xpc3QAR2V0V2luZG93UG9zAEdldFdpbmRvd1NpemUAR2V0V2luZG93V2lkdGgAR2V0V2luZG93SGVpZ2h0AElzV2luZG93Q29sbGFwc2VkAElzV2luZG93QXBwZWFyaW5nAFNldFdpbmRvd0ZvbnRTY2FsZQBTZXROZXh0V2luZG93UG9zAFNldE5leHRXaW5kb3dTaXplAFNldE5leHRXaW5kb3dTaXplQ29uc3RyYWludHMAU2V0TmV4dFdpbmRvd0NvbnRlbnRTaXplAFNldE5leHRXaW5kb3dDb2xsYXBzZWQAU2V0TmV4dFdpbmRvd0ZvY3VzAFNldFdpbmRvd1BvcwBTZXRXaW5kb3dTaXplAFNldFdpbmRvd0NvbGxhcHNlZABTZXRXaW5kb3dGb2N1cwBTZXRXaW5kb3dOYW1lUG9zAFNldFdpbmRvd05hbWVTaXplAFNldFdpbmRvd05hbWVDb2xsYXBzZWQAU2V0V2luZG93TmFtZUZvY3VzAEdldFNjcm9sbFgAR2V0U2Nyb2xsWQBHZXRTY3JvbGxNYXhYAEdldFNjcm9sbE1heFkAU2V0U2Nyb2xsWABTZXRTY3JvbGxZAFNldFNjcm9sbEhlcmUAU2V0U2Nyb2xsRnJvbVBvc1kAU2V0U3RhdGVTdG9yYWdlAEdldFN0YXRlU3RvcmFnZQBQdXNoRm9udABQb3BGb250AFB1c2hTdHlsZUNvbG9yAFBvcFN0eWxlQ29sb3IAUHVzaFN0eWxlVmFyAFBvcFN0eWxlVmFyAEdldFN0eWxlQ29sb3JWZWM0AEdldEZvbnQAR2V0Rm9udFNpemUAR2V0Rm9udFRleFV2V2hpdGVQaXhlbABHZXRDb2xvclUzMgBQdXNoSXRlbVdpZHRoAFBvcEl0ZW1XaWR0aABDYWxjSXRlbVdpZHRoAFB1c2hUZXh0V3JhcFBvcwBQb3BUZXh0V3JhcFBvcwBQdXNoQWxsb3dLZXlib2FyZEZvY3VzAFBvcEFsbG93S2V5Ym9hcmRGb2N1cwBQdXNoQnV0dG9uUmVwZWF0AFBvcEJ1dHRvblJlcGVhdABTZXBhcmF0b3IAU2FtZUxpbmUATmV3TGluZQBTcGFjaW5nAER1bW15AEluZGVudABVbmluZGVudABCZWdpbkdyb3VwAEVuZEdyb3VwAEdldEN1cnNvclBvcwBHZXRDdXJzb3JQb3NYAEdldEN1cnNvclBvc1kAU2V0Q3Vyc29yUG9zAFNldEN1cnNvclBvc1gAU2V0Q3Vyc29yUG9zWQBHZXRDdXJzb3JTdGFydFBvcwBHZXRDdXJzb3JTY3JlZW5Qb3MAU2V0Q3Vyc29yU2NyZWVuUG9zAEFsaWduVGV4dFRvRnJhbWVQYWRkaW5nAEdldFRleHRMaW5lSGVpZ2h0AEdldFRleHRMaW5lSGVpZ2h0V2l0aFNwYWNpbmcAR2V0RnJhbWVIZWlnaHQAR2V0RnJhbWVIZWlnaHRXaXRoU3BhY2luZwBDb2x1bW5zAE5leHRDb2x1bW4AR2V0Q29sdW1uSW5kZXgAR2V0Q29sdW1uV2lkdGgAU2V0Q29sdW1uV2lkdGgAR2V0Q29sdW1uT2Zmc2V0AFNldENvbHVtbk9mZnNldABHZXRDb2x1bW5zQ291bnQAUHVzaElEAFBvcElEAEdldElEAFRleHRVbmZvcm1hdHRlZABUZXh0AFRleHRWAFRleHRDb2xvcmVkAFRleHRDb2xvcmVkVgBUZXh0RGlzYWJsZWQAVGV4dERpc2FibGVkVgBUZXh0V3JhcHBlZABUZXh0V3JhcHBlZFYATGFiZWxUZXh0AExhYmVsVGV4dFYAQnVsbGV0VGV4dABCdWxsZXRUZXh0VgBCdWxsZXQAQnV0dG9uAFNtYWxsQnV0dG9uAEludmlzaWJsZUJ1dHRvbgBJbWFnZQBJbWFnZUJ1dHRvbgBDaGVja2JveABDaGVja2JveEZsYWdzAFJhZGlvQnV0dG9uAFBsb3RMaW5lcwBQbG90SGlzdG9ncmFtAFByb2dyZXNzQmFyAEJlZ2luQ29tYm8ARW5kQ29tYm8AQ29tYm8ARHJhZ0Zsb2F0AERyYWdGbG9hdDIARHJhZ0Zsb2F0MwBEcmFnRmxvYXQ0AERyYWdGbG9hdFJhbmdlMgBEcmFnSW50AERyYWdJbnQyAERyYWdJbnQzAERyYWdJbnQ0AERyYWdJbnRSYW5nZTIASW5wdXRUZXh0AElucHV0VGV4dE11bHRpbGluZQBJbnB1dEZsb2F0AElucHV0RmxvYXQyAElucHV0RmxvYXQzAElucHV0RmxvYXQ0AElucHV0SW50AElucHV0SW50MgBJbnB1dEludDMASW5wdXRJbnQ0AFNsaWRlckZsb2F0AFNsaWRlckZsb2F0MgBTbGlkZXJGbG9hdDMAU2xpZGVyRmxvYXQ0AFNsaWRlckFuZ2xlAFNsaWRlckludABTbGlkZXJJbnQyAFNsaWRlckludDMAU2xpZGVySW50NABWU2xpZGVyRmxvYXQAVlNsaWRlckludABDb2xvckVkaXQzAENvbG9yRWRpdDQAQ29sb3JQaWNrZXIzAENvbG9yUGlja2VyNABDb2xvckJ1dHRvbgBTZXRDb2xvckVkaXRPcHRpb25zAFRyZWVOb2RlAFRyZWVOb2RlRXgAVHJlZVB1c2gAVHJlZVBvcABUcmVlQWR2YW5jZVRvTGFiZWxQb3MAR2V0VHJlZU5vZGVUb0xhYmVsU3BhY2luZwBTZXROZXh0VHJlZU5vZGVPcGVuAENvbGxhcHNpbmdIZWFkZXIAU2VsZWN0YWJsZQBMaXN0Qm94AExpc3RCb3hIZWFkZXIATGlzdEJveEZvb3RlcgBWYWx1ZQBTZXRUb29sdGlwAEJlZ2luVG9vbHRpcABFbmRUb29sdGlwAEJlZ2luTWFpbk1lbnVCYXIARW5kTWFpbk1lbnVCYXIAQmVnaW5NZW51QmFyAEVuZE1lbnVCYXIAQmVnaW5NZW51AEVuZE1lbnUATWVudUl0ZW0AT3BlblBvcHVwAE9wZW5Qb3B1cE9uSXRlbUNsaWNrAEJlZ2luUG9wdXAAQmVnaW5Qb3B1cE1vZGFsAEJlZ2luUG9wdXBDb250ZXh0SXRlbQBCZWdpblBvcHVwQ29udGV4dFdpbmRvdwBCZWdpblBvcHVwQ29udGV4dFZvaWQARW5kUG9wdXAASXNQb3B1cE9wZW4AQ2xvc2VDdXJyZW50UG9wdXAATG9nVG9UVFkATG9nVG9GaWxlAExvZ1RvQ2xpcGJvYXJkAExvZ0ZpbmlzaABMb2dCdXR0b25zAExvZ1RleHQAQmVnaW5EcmFnRHJvcFNvdXJjZQBTZXREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BTb3VyY2UAQmVnaW5EcmFnRHJvcFRhcmdldABBY2NlcHREcmFnRHJvcFBheWxvYWQARW5kRHJhZ0Ryb3BUYXJnZXQAUHVzaENsaXBSZWN0AFBvcENsaXBSZWN0AFN0eWxlQ29sb3JzQ2xhc3NpYwBTdHlsZUNvbG9yc0RhcmsAU3R5bGVDb2xvcnNMaWdodABTZXRJdGVtRGVmYXVsdEZvY3VzAFNldEtleWJvYXJkRm9jdXNIZXJlAElzSXRlbUhvdmVyZWQASXNJdGVtQWN0aXZlAElzSXRlbUNsaWNrZWQASXNJdGVtVmlzaWJsZQBJc0FueUl0ZW1Ib3ZlcmVkAElzQW55SXRlbUFjdGl2ZQBHZXRJdGVtUmVjdE1pbgBHZXRJdGVtUmVjdE1heABHZXRJdGVtUmVjdFNpemUAU2V0SXRlbUFsbG93T3ZlcmxhcABJc1dpbmRvd0ZvY3VzZWQASXNXaW5kb3dIb3ZlcmVkAElzQW55V2luZG93Rm9jdXNlZABJc0FueVdpbmRvd0hvdmVyZWQASXNSZWN0VmlzaWJsZQBHZXRUaW1lAEdldEZyYW1lQ291bnQAR2V0T3ZlcmxheURyYXdMaXN0AEdldERyYXdMaXN0U2hhcmVkRGF0YQBHZXRTdHlsZUNvbG9yTmFtZQBDYWxjSXRlbVJlY3RDbG9zZXN0UG9pbnQAQ2FsY1RleHRTaXplAENhbGNMaXN0Q2xpcHBpbmcAQmVnaW5DaGlsZEZyYW1lAEVuZENoaWxkRnJhbWUAQ29sb3JDb252ZXJ0VTMyVG9GbG9hdDQAQ29sb3JDb252ZXJ0RmxvYXQ0VG9VMzIAQ29sb3JDb252ZXJ0UkdCdG9IU1YAQ29sb3JDb252ZXJ0SFNWdG9SR0IAR2V0S2V5SW5kZXgASXNLZXlEb3duAElzS2V5UHJlc3NlZABJc0tleVJlbGVhc2VkAEdldEtleVByZXNzZWRBbW91bnQASXNNb3VzZURvd24ASXNNb3VzZUNsaWNrZWQASXNNb3VzZURvdWJsZUNsaWNrZWQASXNNb3VzZVJlbGVhc2VkAElzTW91c2VEcmFnZ2luZwBJc01vdXNlSG92ZXJpbmdSZWN0AElzTW91c2VQb3NWYWxpZABHZXRNb3VzZVBvcwBHZXRNb3VzZVBvc09uT3BlbmluZ0N1cnJlbnRQb3B1cABHZXRNb3VzZURyYWdEZWx0YQBSZXNldE1vdXNlRHJhZ0RlbHRhAEdldE1vdXNlQ3Vyc29yAFNldE1vdXNlQ3Vyc29yAENhcHR1cmVLZXlib2FyZEZyb21BcHAAQ2FwdHVyZU1vdXNlRnJvbUFwcABNZW1BbGxvYwBNZW1GcmVlAEdldENsaXBib2FyZFRleHQAU2V0Q2xpcGJvYXJkVGV4dABHZXRWZXJzaW9uAENyZWF0ZUNvbnRleHQARGVzdHJveUNvbnRleHQAR2V0Q3VycmVudENvbnRleHQAU2V0Q3VycmVudENvbnRleHQAUDEySW1HdWlDb250ZXh0ADEySW1HdWlDb250ZXh0AE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUAaWkAaWlpAE4xMGVtc2NyaXB0ZW4zdmFsRQBpaWlmaQB4AHkAaWlpaWkAaWlpZgBpaWlmZgBpaWlpAHZpZmZmaWlpADZJbVZlYzQAegB3ADZJbVZlYzIAdmlpZmlpAGlpaWlpZmkAaWlpaWZpAFAyMEltRHJhd0xpc3RTaGFyZWREYXRhADIwSW1EcmF3TGlzdFNoYXJlZERhdGEAUDEwSW1EcmF3TGlzdAAxMEltRHJhd0xpc3QAdmlpAFAxMEltR3VpU3R5bGUAMTBJbUd1aVN0eWxlAHZpaWlpAFRPRE86ICVzCgBhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoc3RkOjpzdHJpbmcsIEltR3VpRHJhZ0Ryb3BGbGFncykgY29uc3QAaWlpaWlpAGF1dG8gRW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aTo6RW1zY3JpcHRlbkJpbmRpbmdJbml0aWFsaXplcl9JbUd1aSgpOjooYW5vbnltb3VzIGNsYXNzKTo6b3BlcmF0b3IoKShzdGQ6OnN0cmluZywgZW1zY3JpcHRlbjo6dmFsLCBzaXplX3QsIEltR3VpQ29uZCkgY29uc3QAJXMAdmlpaQBib29sZWFuAG51bWJlcgBzdHJpbmcAaWlpaWlpaWkAaWlpaWlmZmlmAGlpaWlpaWkAaWlpaWZmAGlpaWlmZmlmAGlpaWlmZmlpAGlpaWlpaWlpaQBVc2VyRGF0YQBQMjVJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhADI1SW1HdWlUZXh0RWRpdENhbGxiYWNrRGF0YQBpaWlpaWZmZmlpAGlpaWlmaWlpAGlpaWlpZmZmaWlmAGlpaWlmZmZpZgB2aWZpaQB2aWlpaWlpaWlpaQB2aWlpaWlpaQB2aWlmAGZpaQBQNkltRm9udAA2SW1Gb250AFBLNkltVmVjNABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoKSBjb25zdABhdXRvIEVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWk6OkVtc2NyaXB0ZW5CaW5kaW5nSW5pdGlhbGl6ZXJfSW1HdWkoKTo6KGFub255bW91cyBjbGFzcyk6Om9wZXJhdG9yKCkoZW1zY3JpcHRlbjo6dmFsKSBjb25zdAB2aWZmAHZpaWlpaQBQMzFJbUd1aVNpemVDb25zdHJhaW50Q2FsbGJhY2tEYXRhADMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQB2aWYAZmkAdmkAUDEwSW1EcmF3RGF0YQAxMEltRHJhd0RhdGEAUDdJbUd1aUlPADdJbUd1aUlPAEltR3VpU3R5bGUAQWxwaGEAZ2V0V2luZG93UGFkZGluZwBXaW5kb3dSb3VuZGluZwBXaW5kb3dCb3JkZXJTaXplAGdldFdpbmRvd01pblNpemUAZ2V0V2luZG93VGl0bGVBbGlnbgBDaGlsZFJvdW5kaW5nAENoaWxkQm9yZGVyU2l6ZQBQb3B1cFJvdW5kaW5nAFBvcHVwQm9yZGVyU2l6ZQBnZXRGcmFtZVBhZGRpbmcARnJhbWVSb3VuZGluZwBGcmFtZUJvcmRlclNpemUAZ2V0SXRlbVNwYWNpbmcAZ2V0SXRlbUlubmVyU3BhY2luZwBnZXRUb3VjaEV4dHJhUGFkZGluZwBJbmRlbnRTcGFjaW5nAENvbHVtbnNNaW5TcGFjaW5nAFNjcm9sbGJhclNpemUAU2Nyb2xsYmFyUm91bmRpbmcAR3JhYk1pblNpemUAR3JhYlJvdW5kaW5nAGdldEJ1dHRvblRleHRBbGlnbgBnZXREaXNwbGF5V2luZG93UGFkZGluZwBnZXREaXNwbGF5U2FmZUFyZWFQYWRkaW5nAEFudGlBbGlhc2VkTGluZXMAQW50aUFsaWFzZWRGaWxsAEN1cnZlVGVzc2VsbGF0aW9uVG9sAGdldENvbG9yc0F0AHNldENvbG9yc0F0AFNjYWxlQWxsU2l6ZXMAUDZJbVZlYzQAUDZJbVZlYzIAdgBQSzEwSW1HdWlTdHlsZQBJbUd1aUlPAGdldERpc3BsYXlTaXplAERlbHRhVGltZQBnZXRLZXlNYXBBdABzZXRLZXlNYXBBdABnZXRGb250cwBGb250R2xvYmFsU2NhbGUAZ2V0RGlzcGxheUZyYW1lYnVmZmVyU2NhbGUAZ2V0TW91c2VQb3MAZ2V0TW91c2VEb3duQXQAc2V0TW91c2VEb3duQXQATW91c2VXaGVlbABNb3VzZURyYXdDdXJzb3IAS2V5Q3RybABLZXlTaGlmdABLZXlBbHQAS2V5U3VwZXIAZ2V0S2V5c0Rvd25BdABzZXRLZXlzRG93bkF0AEFkZElucHV0Q2hhcmFjdGVyAFdhbnRDYXB0dXJlTW91c2UAV2FudENhcHR1cmVLZXlib2FyZABXYW50VGV4dElucHV0AFdhbnRNb3ZlTW91c2UARnJhbWVyYXRlAGdldE1vdXNlRGVsdGEAZ2V0TW91c2VEb3duRHVyYXRpb25BdABnZXRLZXlzRG93bkR1cmF0aW9uQXQAZmlpaQBQSzdJbUd1aUlPAFAxMUltRm9udEF0bGFzADExSW1Gb250QXRsYXMASW1Gb250QXRsYXMAR2V0VGV4RGF0YUFzUkdCQTMyAGdldFRleElEAHNldFRleElEAFRleFdpZHRoAFRleEhlaWdodABQSzExSW1Gb250QXRsYXMAcGl4ZWxzAHdpZHRoAGhlaWdodABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUASW1Gb250AEdldERlYnVnTmFtZQA8dW5rbm93bj4AUEs2SW1Gb250AEltRHJhd0RhdGEASXRlcmF0ZURyYXdMaXN0cwBWYWxpZABDbWRMaXN0c0NvdW50AFRvdGFsVnR4Q291bnQAVG90YWxJZHhDb3VudABTY2FsZUNsaXBSZWN0cwBQSzEwSW1EcmF3RGF0YQBQSzEwSW1EcmF3TGlzdABJbURyYXdMaXN0AEl0ZXJhdGVEcmF3Q21kcwBJZHhCdWZmZXIAVnR4QnVmZmVyAFB1c2hDbGlwUmVjdEZ1bGxTY3JlZW4AQWRkTGluZQBBZGRSZWN0AEFkZFJlY3RGaWxsZWQAQWRkUmVjdEZpbGxlZE11bHRpQ29sb3IAQWRkUXVhZABBZGRRdWFkRmlsbGVkAEFkZFRyaWFuZ2xlAEFkZFRyaWFuZ2xlRmlsbGVkAEFkZENpcmNsZQBBZGRDaXJjbGVGaWxsZWQAQWRkVGV4dABBZGRUZXh0X0ZvbnQAQWRkQmV6aWVyQ3VydmUAdmlpaWlpaWlmaQB2aWlpZmlpaWlmaQB2aWlpZmlpAHZpaWlmaWlmAHZpaWlpaWkAdmlpaWlpaWYAdmlpaWlpaWlmAHZpaWlpaWlpaQB2aWlpaWlmaQB2aWlpaWlmaWYAdmlpaWlpZgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ljRUUAU2l6ZSA+IDAAaW1ndWkvaW1ndWkuaABmcm9udABQSzlJbURyYXdDbWQAOUltRHJhd0NtZABJbURyYXdDbWQARWxlbUNvdW50AGdldENsaXBSZWN0AFRleHR1cmVJZABQOUltRHJhd0NtZABJbUd1aUxpc3RDbGlwcGVyAFN0YXJ0UG9zWQBJdGVtc0hlaWdodABJdGVtc0NvdW50AFN0ZXBObwBEaXNwbGF5U3RhcnQARGlzcGxheUVuZABTdGVwAFAxNkltR3VpTGlzdENsaXBwZXIAMTZJbUd1aUxpc3RDbGlwcGVyAHZpaWlmAFBLMTZJbUd1aUxpc3RDbGlwcGVyAEltR3VpU2l6ZUNvbnN0cmFpbnRDYWxsYmFja0RhdGEAZ2V0UG9zAGdldEN1cnJlbnRTaXplAGdldERlc2lyZWRTaXplAFBLNkltVmVjMgBQSzMxSW1HdWlTaXplQ29uc3RyYWludENhbGxiYWNrRGF0YQBJbUd1aVRleHRFZGl0Q2FsbGJhY2tEYXRhAEV2ZW50RmxhZwBGbGFncwBSZWFkT25seQBFdmVudENoYXIARXZlbnRLZXkAZ2V0QnVmAHNldEJ1ZgBCdWZUZXh0TGVuAEJ1ZlNpemUAQnVmRGlydHkAQ3Vyc29yUG9zAFNlbGVjdGlvblN0YXJ0AFNlbGVjdGlvbkVuZABEZWxldGVDaGFycwBJbnNlcnRDaGFycwBIYXNTZWxlY3Rpb24AUEsyNUltR3VpVGV4dEVkaXRDYWxsYmFja0RhdGEASW1WZWM0AENvcHkARXF1YWxzAGlpZmZmZgBJbVZlYzIAaWlmZgBtYWxsaW5mbwBhcmVuYQBvcmRibGtzAHNtYmxrcwBoYmxrcwBoYmxraGQAdXNtYmxrcwBmc21ibGtzAHVvcmRibGtzAGZvcmRibGtzAGtlZXBjb3N0AHZvaWQAYm9vbABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWRFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxmbG9hdD4ATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGxvbmc+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxjaGFyPgBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJaE5TXzExY2hhcl90cmFpdHNJaEVFTlNfOWFsbG9jYXRvckloRUVFRQBkb3VibGUAZmxvYXQAdW5zaWduZWQgbG9uZwBsb25nAHVuc2lnbmVkIGludABpbnQAdW5zaWduZWQgc2hvcnQAc2hvcnQAdW5zaWduZWQgY2hhcgBzaWduZWQgY2hhcgBjaGFyAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAtKyAgIDBYMHgAKG51bGwpAC0wWCswWCAwWC0weCsweCAweABpbmYASU5GAE5BTgAwMTIzNDU2Nzg5QUJDREVGLgBUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAGluZmluaXR5AG5hbgByd2EAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlczogJXMAdGVybWluYXRpbmcgd2l0aCAlcyBleGNlcHRpb24gb2YgdHlwZSAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGZvcmVpZ24gZXhjZXB0aW9uAHRlcm1pbmF0aW5nAHVuY2F1Z2h0AFN0OWV4Y2VwdGlvbgBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBwdGhyZWFkX29uY2UgZmFpbHVyZSBpbiBfX2N4YV9nZXRfZ2xvYmFsc19mYXN0KCkAY2Fubm90IGNyZWF0ZSBwdGhyZWFkIGtleSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQBjYW5ub3QgemVybyBvdXQgdGhyZWFkIHZhbHVlIGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAHRlcm1pbmF0ZV9oYW5kbGVyIHVuZXhwZWN0ZWRseSByZXR1cm5lZABOMTBfX2N4eGFiaXYxMTlfX3BvaW50ZXJfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX3BiYXNlX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTIzX19mdW5kYW1lbnRhbF90eXBlX2luZm9FAHYAUHYARG4AYgBjAGgAYQBzAHQAaQBqAGwAbQBmAGQATjEwX19jeHhhYml2MTIxX192bWlfY2xhc3NfdHlwZV9pbmZvRQ==";var tempDoublePtr=STATICTOP;STATICTOP+=16;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 __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){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--;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 ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0}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{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){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{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffers){___syscall146.buffers=[null,[],[]];___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>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=value;return value}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{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{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return(new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n"))(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,(function(message){this.name=errorName;this.message=message;var stack=(new Error(message)).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}}));errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=(function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}});return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach((function(type){typeDependencies[type]=dependentTypes}));function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])}),destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this)}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=(function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)});proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register((function(){clonedHandle["delete"]()})));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return Object.create(prototype,{$$:{value:record}})}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>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;i0?", ":"")+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;i4&&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>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){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value}),"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,(function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)}),argCount-1);whenDependentTypesAreResolved([],argTypes,(function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]}))}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=(function(value){return value});if(minRange===0){var bitshift=32-8*size;fromWireType=(function(value){return value<>>bitshift})}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":(function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0}),"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap["buffer"],data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":(function(value){var length=HEAPU32[value>>2];var a=new Array(length);for(var i=0;i>2]=length;for(var i=0;i255){_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){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>2]=length;var start=ptr+4>>shift;for(var i=0;i>2]=rd;return returnType["toWireType"](destructors,handle)}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i4){emval_handle_array[handle].refcount+=1}}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function __emval_typeof(handle){handle=requireHandle(handle);return __emval_register(typeof handle)}function _abort(){Module["abort"]()}var _llvm_fabs_f32=Math_abs;var _llvm_fabs_f64=Math_abs;var _llvm_pow_f32=Math_pow;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;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}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=0.0;nt(n,b,0);j=n+20|0;e=c[j>>2]|0;if((e|0)>(d|0)){f=0;h=0}else{k=n+8|0;f=0;while(1){g[i>>2]=+g[k>>2]+ +g[i>>2];nt(n,b,e);m=c[j>>2]|0;h=m+e|0;if((h|0)>(d|0)){h=e;e=m;break}else{f=e;e=h}}}c[a+12>>2]=h;c[a+16>>2]=e;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a+20>>2]=f;c[a>>2]=c[n>>2];if((h|0)<(d|0)){f=d-h|0;e=0;do{p=+ot(b,h,e);g[a>>2]=p+ +g[a>>2];e=e+1|0}while((e|0)!=(f|0))}}else{if(e|0){nt(n,b,0);g[a+4>>2]=0.0;c[a+12>>2]=0;c[a+16>>2]=d;g[a+8>>2]=+g[n+16>>2]-+g[n+12>>2];c[a>>2]=c[n+4>>2];break}g[a+4>>2]=0.0;g[a>>2]=0.0;g[a+8>>2]=1.0;if((d|0)>0){h=n+20|0;f=0;while(1){nt(n,b,f);e=(c[h>>2]|0)+f|0;if((e|0)<(d|0))f=e;else break}}else{f=0;e=0}c[a+12>>2]=e;c[a+16>>2]=0;c[a+20>>2]=f}while(0);l=o;return}function nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0;e=l;l=l+16|0;f=e+8|0;h=e;i=c[b+12>>2]|0;c[f>>2]=0;d=i+(d<<1)|0;zp(h,d,i+(c[b+44>>2]<<1)|0,f,1);g[a>>2]=0.0;c[a+4>>2]=c[h>>2];b=c[h+4>>2]|0;c[a+8>>2]=b;g[a+12>>2]=0.0;c[a+16>>2]=b;c[a+20>>2]=(c[f>>2]|0)-d>>1;l=e;return}function ot(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0;a=b[(vt(a+4|0,e+d|0)|0)>>1]|0;if(a<<16>>16==10)f=-1.0;else{f=+Ap(c[(c[244]|0)+5928>>2]|0,a);e=c[244]|0;f=f*(+g[e+5932>>2]/+g[c[e+5928>>2]>>2])}return +f}function pt(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;At(b,c,d,e);at(b,d,e);a[c+15>>0]=0;return}function qt(a,c){a=a|0;c=c|0;return b[(Bt(a+4|0,c)|0)>>1]|0}function rt(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0;g=st(a,e)|0;do if(g){c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;if(!e){b[g+8>>1]=-1;a=0;break}else{d=a+3190|0;f=b[d>>1]|0;b[g+8>>1]=f;b[d>>1]=(f&65535)+e;a=a+1188+(f<<16>>16<<1)|0;break}}else a=0;while(0);return a|0}function st(a,c){a=a|0;c=c|0;var d=0,e=0;tt(a);d=a+3186|0;if((b[d>>1]|0)==99)ut(a);if((c|0)>999){b[d>>1]=0;b[a+3190>>1]=0;a=0}else{e=a+3190|0;if(((b[e>>1]|0)+c|0)>999)do ut(a);while(((b[e>>1]|0)+c|0)>999);e=b[d>>1]|0;b[d>>1]=e+1<<16>>16;a=a+((e<<16>>16)*12|0)|0}return a|0}function tt(a){a=a|0;b[a+3188>>1]=99;b[a+3192>>1]=999;return}function ut(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0;i=a+3186|0;c=b[i>>1]|0;if(c<<16>>16>0){d=b[a+8>>1]|0;a:do if(d<<16>>16>-1){h=b[a+4>>1]|0;g=a+3190|0;c=(e[g>>1]|0)-h|0;b[g>>1]=c;_aa(a+1188|0,a+1188+(h<<1)|0,c<<16>>15|0)|0;c=b[i>>1]|0;if(c<<16>>16>0){g=c<<16>>16;f=0;while(1){if(d<<16>>16>-1)b[a+(f*12|0)+8>>1]=(d&65535)-h;d=f+1|0;if((d|0)>=(g|0))break a;f=d;d=b[a+(d*12|0)+8>>1]|0}}}while(0);h=c+-1<<16>>16;b[i>>1]=h;_aa(a|0,a+12|0,(h<<16>>16)*12|0)|0}return}function vt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1030,12749);return 0}function wt(a){a=a|0;var c=0,d=0,f=0,g=0,h=0;h=a+3188|0;c=b[h>>1]|0;if(c<<16>>16<99){if((b[a+1184>>1]|0)>-1){g=b[a+1180>>1]|0;f=a+3192|0;c=(e[f>>1]|0)+g|0;b[f>>1]=c;c=c<<16>>16;f=a+1188+(c<<1)|0;_aa(f|0,f+(0-g<<1)|0,999-c<<1|0)|0;c=b[h>>1]|0;if(c<<16>>16<98){c=c<<16>>16;while(1){d=a+(c*12|0)+8|0;f=b[d>>1]|0;if(f<<16>>16>-1)b[d>>1]=(f&65535)+g;if((c|0)<97)c=c+1|0;else break}c=b[h>>1]|0}}g=c<<16>>16;a=a+(g*12|0)|0;_aa(a|0,a+-12|0,(99-g|0)*12|0)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16}return}function xt(a){a=a|0;var b=0,d=0,e=0;d=a+8|0;e=c[d>>2]|0;a=a+4|0;b=c[a>>2]|0;if((e|0)<(b|0)){c[d>>2]=b;c[a>>2]=e}return}function yt(a,b){a=a|0;b=b|0;if((b|0)>0){a=a+4|0;if(zt(e[(vt(a,b+-1|0)|0)>>1]|0)|0)a=((zt(e[(vt(a,b)|0)>>1]|0)|0)^1)&1;else a=0}else a=1;return a|0}function zt(a){a=a|0;a:do if(Bq(a)|0)a=1;else{switch(a|0){case 124:case 40:case 41:case 44:case 59:case 91:case 93:case 123:case 125:{a=1;break a}default:{}}a=0}while(0);return a|0}function At(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=rt(c+24|0,d,e,0)|0;if((f|0)!=0&(e|0)>0){c=0;do{b[f+(c<<1)>>1]=qt(a,c+d|0)|0;c=c+1|0}while((c|0)!=(e|0))}return}function Bt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<1)|0;else Cb(12740,37262,1031,12749);return 0}function Ct(d,e){d=d|0;e=e|0;b[d+3210>>1]=0;b[d+3214>>1]=0;b[d+3212>>1]=99;b[d+3216>>1]=999;c[d+4>>2]=0;c[d+8>>2]=0;c[d>>2]=0;a[d+15>>0]=0;g[d+20>>2]=0.0;a[d+13>>0]=0;a[d+14>>0]=1;a[d+16>>0]=e;a[d+12>>0]=0;return}function Dt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+32|0;j=r;k=_s(a)|0;p=j+4|0;g[p>>2]=0.0;g[j>>2]=0.0;m=j+16|0;g[m>>2]=0.0;n=j+12|0;g[n>>2]=0.0;o=j+20|0;c[o>>2]=0;a:do if((k|0)>0){f=j+8|0;e=0;h=0.0;while(1){nt(j,a,e);q=c[o>>2]|0;if((q|0)<1){e=k;break a}if((e|0)==0?h+ +g[n>>2]>d:0){e=0;break a}if(h+ +g[m>>2]>d)break;e=q+e|0;if((e|0)<(k|0))h=h+ +g[f>>2];else{e=k;break a}}h=+g[j>>2];if(!(h>b)){b:do if(+g[p>>2]>b){f=0;while(1){d=+ot(a,e,f);i=h+d;if(i>b)break;f=f+1|0;if((f|0)<(q|0))h=i;else break b}e=f+e|0;if(h+d*.5>b)break a;e=e+1|0;break a}while(0);e=q+e+(((qt(a,e+-1+q|0)|0)<<16>>16==10)<<31>>31)|0}}else e=k;while(0);l=r;return e|0}function Et(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1031,12749);return 0}function Ft(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function Gt(a,d){a=a|0;d=d|0;var e=0;a=a+56|0;e=c[a>>2]|0;b[e>>1]=d;c[a>>2]=e+2;return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+52|0;h=b;b=c[h+4>>2]|0;g=c[f>>2]|0;c[g>>2]=c[h>>2];c[g+4>>2]=b;g=d;b=c[g+4>>2]|0;d=(c[f>>2]|0)+8|0;c[d>>2]=c[g>>2];c[d+4>>2]=b;d=c[f>>2]|0;c[d+16>>2]=e;c[f>>2]=d+20;e=a+48|0;c[e>>2]=(c[e>>2]|0)+1;return}function It(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0;i=l;l=l+16|0;f=i+8|0;h=i;switch(d|0){case 0:{k=+g[c>>2];d=b+4|0;j=+g[c+4>>2];df(f,+g[b>>2]+k,+g[d>>2]-j);df(h,+g[b>>2]+k,+g[d>>2]+j);Vv(a,f,h,b,e);break}case 1:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]-k);Vv(a,f,h,b,e);break}case 2:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]+j,+g[d>>2]+k);df(h,+g[b>>2]-j,+g[d>>2]+k);Vv(a,f,h,b,e);break}case 3:{j=+g[c>>2];d=b+4|0;k=+g[c+4>>2];df(f,+g[b>>2]-j,+g[d>>2]-k);df(h,+g[b>>2]+j,+g[d>>2]-k);Vv(a,f,h,b,e);break}default:{}}l=i;return}function Jt(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*56|0)|0;else Cb(12740,37262,1030,12749);return 0}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ot(a,Pt(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*56|0)|0;d=b;a=e+56|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function Lt(a){a=a|0;Qt(a+44|0);Rt(a);return}function Mt(a){a=a|0;St(a+44|0);return}function Nt(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*56|0)|0;else Cb(37253,37262,1040,13011);return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*56|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*56|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pt(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qt(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Rt(a){a=a|0;var d=0;c[a+12>>2]=0;c[a>>2]=0;c[a+4>>2]=0;b[a+8>>1]=0;c[a+16>>2]=1;d=a+20|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;Tt(a+44|0);return}function St(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tt(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ut(a){a=a|0;return (c[a>>2]|0)==0|0}function Vt(b,e){b=b|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=l;l=l+112|0;p=q+104|0;n=q+96|0;m=q+64|0;o=q+16|0;j=q;f=c[b>>2]|0;k=b+140|0;if(!(a[k>>0]|0))i=d[b+141>>0]|0;else i=1;c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=i;c[j+12>>2]=b;if($n(b,12283,j)|0){ur(c[b+596>>2]|0);e=b+20|0;v=+g[b+24>>2];f=b+28|0;u=+g[f>>2];t=+g[b+32>>2];s=+g[b+52>>2];r=+g[b+56>>2];h[o>>3]=+g[e>>2];h[o+8>>3]=v;h[o+16>>3]=u;h[o+24>>3]=t;h[o+32>>3]=s;h[o+40>>3]=r;lo(12302,o);if(ih(0)|0){j=(c[244]|0)+6412|0;tf(o,e,f);Pv(j,e,o,-16711681,0.0,15,1.0)}s=+g[b+104>>2];t=+en(b);u=+g[b+108>>2];v=+gn(b);h[m>>3]=s;h[m+8>>3]=t;h[m+16>>3]=u;h[m+24>>3]=v;lo(12364,m);e=d[b+142>>0]|0;c[n>>2]=d[k>>0];c[n+4>>2]=e;lo(12394,n);e=c[b+604>>2]|0;if((e|0)!=(b|0))Vt(e,12424);e=b+300|0;if((c[e>>2]|0)>0)tr(e,12435);c[p>>2]=c[b+568>>2]<<3;lo(12448,p);kr()}l=q;return}function Wt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;cf(a);g[a>>2]=+(b|0)*.003921568859368563;g[a+4>>2]=+(c|0)*.003921568859368563;g[a+8>>2]=+(d|0)*.003921568859368563;g[a+12>>2]=+(e|0)*.003921568859368563;return}function Xt(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yt(a){a=a|0;return c[a+8>>2]|0}function Zt(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function _t(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;e=b+4|0;c=+g[e>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[e>>2];if(+g[d>>2]>2]=c;return}function $t(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function au(a){a=a|0;var b=0;g[a>>2]=+(~~+g[a>>2]|0);b=a+4|0;g[b>>2]=+(~~+g[b>>2]|0);b=a+8|0;g[b>>2]=+(~~+g[b>>2]|0);a=a+12|0;g[a>>2]=+(~~+g[a>>2]|0);return}function bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function cu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function eu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function gu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function iu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ju(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){lu(a,mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function ku(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e*20|0)|0)>>>0>=b>>>0):0){b=(b-f|0)/20|0;if((e|0)==(c[a+4>>2]|0)){lu(a,mu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b*20|0)|0;_aa(f+20|0,f|0,(e-b|0)*20|0)|0}f=(c[g>>2]|0)+(b*20|0)|0;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];c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b*20|0)|0}Cb(11501,37262,1065,11531);return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function uu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function wu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*12|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*12|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function yu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<1)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<1|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Au(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Bu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Cu(){Ye();Ze();Hk();return}function Du(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,.8999999761581421,.8999999761581421,.8999999761581421,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.699999988079071);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10999999940395355,.10999999940395355,.14000000059604645,.9200000166893005);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,.5);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.4300000071525574,.38999998569488525);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4699999988079071,.4699999988079071,.6899999976158142,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.41999998688697815,.4099999964237213,.6399999856948853,.6899999976158142);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.27000001072883606,.27000001072883606,.5400000214576721,.8299999833106995);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3199999928474426,.3199999928474426,.6299999952316284,.8700000047683716);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.20000000298023224);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.550000011920929,.800000011920929);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.25,.30000001192092896,.6000000238418579);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.30000001192092896);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.800000011920929,.4000000059604645);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.8999999761581421,.8999999761581421,.5);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.30000001192092896);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.38999998569488525,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3499999940395355,.4000000059604645,.6100000143051147,.6200000047683716);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.47999998927116394,.7099999785423279,.7900000214576721);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4000000059604645,.4000000059604645,.8999999761581421,.44999998807907104);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.44999998807907104,.44999998807907104,.8999999761581421,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5299999713897705,.5299999713897705,.8700000047683716,.800000011920929);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.699999988079071,1.0);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.1599999964237213);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.6000000238418579);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.7799999713897705,.8199999928474426,1.0,.8999999761581421);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5,.5,.8999999761581421,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.8999999761581421,.6000000238418579);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.699999988079071,.699999988079071,.699999988079071,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,1.0,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;f=a+148|0;Of(b,1.0,1.0,1.0,1.0);c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.5,.5,.5,1.0);f=a+164|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.05999999865889549,.05999999865889549,.9399999976158142);f=a+180|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,0.0);f=a+196|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.07999999821186066,.07999999821186066,.07999999821186066,.9399999976158142);f=a+212|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,.4300000071525574,.4300000071525574,.5,.5);f=a+228|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,.5400000214576721);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.03999999910593033,.03999999910593033,.03999999910593033,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.1599999964237213,.28999999165534973,.47999998927116394,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.14000000059604645,.14000000059604645,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.019999999552965164,.019999999552965164,.019999999552965164,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.3100000023841858,.3100000023841858,.3100000023841858,1.0);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,1.0);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5099999904632568,.5099999904632568,.5099999904632568,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.23999999463558197,.5199999809265137,.8799999952316284,1.0);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];e=a+580|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.10000000149011612,.4000000059604645,.75,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.25);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.4099999964237213,.4099999964237213,.4099999964237213,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6100000143051147,.6100000143051147,.6100000143051147,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.6000000238418579,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,0.0,.8999999761581421);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Fu(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if(!a)a=Ah()|0;e=a+148|0;Of(b,0.0,0.0,0.0,1.0);c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6000000238418579,.6000000238418579,.6000000238418579,1.0);e=a+164|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9399999976158142,.9399999976158142,.9399999976158142,1.0);e=a+180|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+196|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.9800000190734863);e=a+212|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,.30000001192092896);e=a+228|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,0.0,0.0,0.0,0.0);e=a+244|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,1.0);e=a+260|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+276|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+292|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9599999785423279,.9599999785423279,.9599999785423279,1.0);e=a+308|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8199999928474426,.8199999928474426,.8199999928474426,1.0);e=a+324|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,1.0,1.0,.5099999904632568);e=a+340|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8600000143051147,.8600000143051147,.8600000143051147,1.0);e=a+356|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.9800000190734863,.9800000190734863,.5299999713897705);e=a+372|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.6899999976158142,.6899999976158142,.6899999976158142,.800000011920929);e=a+388|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,.800000011920929);e=a+404|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.49000000953674316,.49000000953674316,.49000000953674316,1.0);e=a+420|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+436|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.7799999713897705);e=a+452|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.46000000834465027,.5400000214576721,.800000011920929,.6000000238418579);e=a+468|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.4000000059604645);e=a+484|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+500|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.05999999865889549,.5299999713897705,.9800000190734863,1.0);e=a+516|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3100000023841858);e=a+532|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.800000011920929);e=a+548|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,1.0);e=a+564|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+580|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,.7799999713897705);e=a+596|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.14000000059604645,.4399999976158142,.800000011920929,1.0);e=a+612|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.800000011920929,.800000011920929,.800000011920929,.5600000023841858);e=a+628|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.6700000166893005);e=a+644|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);e=a+660|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.5899999737739563,.5899999737739563,.5899999737739563,.5);e=a+676|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+692|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.9800000190734863,.38999998569488525,.36000001430511475,1.0);e=a+708|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.38999998569488525,.38999998569488525,.38999998569488525,1.0);e=a+724|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.4300000071525574,.3499999940395355,1.0);e=a+740|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.8999999761581421,.699999988079071,0.0,1.0);e=a+756|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,1.0,.44999998807907104,0.0,1.0);e=a+772|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.3499999940395355);e=a+788|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.20000000298023224,.20000000298023224,.20000000298023224,.3499999940395355);e=a+804|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Of(b,.25999999046325684,.5899999737739563,.9800000190734863,.949999988079071);a=a+820|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Gu(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0;h=l;l=l+16|0;f=h;bf(a);b=a+20|0;cf(b);d=a+132|0;e=a+36|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));c[a+8>>2]=0;g[a+12>>2]=0.0;g[a+16>>2]=0.0;Of(f,-8192.0,-8192.0,8192.0,8192.0);c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];b=0;do{j=+(b|0)*2.0*3.1415927410125732/12.0;df(f,+E(+j),+F(+j));i=f;d=c[i+4>>2]|0;e=a+36+(b<<3)|0;c[e>>2]=c[i>>2];c[e+4>>2]=d;b=b+1|0}while((b|0)!=12);l=h;return}function Hu(a){a=a|0;Iu(a,0);op(a+12|0,0);Ju(a+24|0,0);c[a+36>>2]=3;c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Ku(a+60|0,0);Lu(a+72|0,0);Rs(a+84|0,0);c[a+96>>2]=0;c[a+100>>2]=1;return}function Iu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Tu(a,Su(a,b)|0);c[a>>2]=b;return}function Ju(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ru(a,Qu(a,b)|0);c[a>>2]=b;return}function Ku(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Pu(a,Ou(a,b)|0);c[a>>2]=b;return}function Lu(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Nu(a,Mu(a,b)|0);c[a>>2]=b;return}function Mu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ou(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Qu(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*20|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*20|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Su(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<5)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<5|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Uu(a){a=a|0;var b=0,d=0;Vu(a);Ai(a+12|0);Wu(a+24|0);c[a+48>>2]=0;c[a+52>>2]=0;c[a+56>>2]=0;Xu(a+60|0);Yu(a+72|0);Zu(a+84|0);c[a+96>>2]=0;c[a+100>>2]=1;b=a+104|0;if((c[b>>2]|0)>0){a=0;do{if(!a){d=$u(b,0)|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}Vu($u(b,a)|0);Ai(($u(b,a)|0)+12|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}_u(b);return}function Vu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Wu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Xu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Yu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Zu(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function _u(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function $u(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function av(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+32|0;e=f;bv(e);b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;d=e+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;c[e+20>>2]=b;if(+g[d>>2]<=+g[e+12>>2]?+g[e+8>>2]<=+g[e+16>>2]:0){cv(a,e);l=f;return}Cb(12760,12849,353,12870)}function bv(a){a=a|0;cf(a+4|0);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+28>>2]=0;return}function cv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Tu(a,Su(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<5)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];c[a+28>>2]=c[b+28>>2];return}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];b=c[a>>2]|0;do if((b|0)>0?(g=b+-1|0,h=c[a+8>>2]|0,e=h+(g<<5)|0,(e|0)!=0):0){d=(c[e>>2]|0)==0;if(!d?_7(h+(g<<5)+4|0,f,16)|0:0){i=9;break}if(!(c[h+(g<<5)+24>>2]|0)){b=(b|0)>1;e=b?e+-32|0:0;if(b&d?(_7(e+4|0,f,16)|0)==0:0){b=c[a+72>>2]|0;if(!b)b=0;else b=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;if((c[e+20>>2]|0)==(b|0)?(c[e+24>>2]|0)==0:0){Js(a);break}}h=h+(g<<5)+4|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]}else i=9}else i=9;while(0);if((i|0)==9)av(a);l=j;return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+72>>2]|0;if(!b)e=0;else e=c[(c[a+80>>2]|0)+(b+-1<<2)>>2]|0;do if(c[a>>2]|0){d=Is(a)|0;b=(c[d>>2]|0)==0;if(!b?(c[d+20>>2]|0)!=(e|0):0){g=7;break}if(!(c[d+24>>2]|0)){h=(c[a>>2]|0)>1;f=h?d+-32|0:0;if(h&b?(c[f+20>>2]|0)==(e|0):0){b=c[a+60>>2]|0;if(!b)b=(c[a+40>>2]|0)+20|0;else b=(c[a+68>>2]|0)+(b+-1<<4)|0;if((_7(f+4|0,b,16)|0)==0?(c[f+24>>2]|0)==0:0){Js(a);break}}c[d+20>>2]=e}else g=7}else g=7;while(0);if((g|0)==7)av(a);return}function fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0.0,m=0,n=0;n=l;l=l+16|0;m=n;Of(m,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2]);if(e?(h=c[a+60>>2]|0,h|0):0){d=c[a+68>>2]|0;e=h+-1|0;f=+g[d+(e<<4)>>2];i=+g[d+(e<<4)+4>>2];j=+g[d+(e<<4)+8>>2];k=+g[d+(e<<4)+12>>2];if(+g[m>>2]>2]=f;b=m+4|0;if(+g[b>>2]>2]=i;b=m+8|0;if(+g[b>>2]>j)g[b>>2]=j;b=m+12|0;if(+g[b>>2]>k)g[b>>2]=k}e=m+8|0;g[e>>2]=+gv(+g[m>>2],+g[e>>2]);e=m+12|0;g[e>>2]=+gv(+g[m+4>>2],+g[e>>2]);hv(a+60|0,m);dv(a);l=n;return}function gv(a,b){a=+a;b=+b;return +(a>=b?a:b)}function hv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Pu(a,Ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d<<4)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function iv(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b+24|0;e=b+16|0;h=b+8|0;f=b;i=a+40|0;j=c[i>>2]|0;df(h,+g[j+20>>2],+g[j+24>>2]);i=c[i>>2]|0;df(f,+g[i+28>>2],+g[i+32>>2]);c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];fv(a,e,d,0);l=b;return}function jv(a){a=a|0;var b=0;b=a+60|0;if((c[b>>2]|0)>0){kv(b);dv(a);return}else Cb(12881,12849,440,33201)}function kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function lv(a,b){a=a|0;b=b|0;mv(a+72|0,b);ev(a);return}function mv(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Nu(a,Mu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function nv(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)>0){ov(b);ev(a);return}else Cb(12914,12849,453,12939)}function ov(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+48|0;j=o;m=o+32|0;if((c[b+96>>2]|0)==0?(e=b+100|0,(c[e>>2]|0)==1):0){n=b+104|0;k=c[n>>2]|0;if((k|0)<(d|0))qv(n,d);c[e>>2]=d;i=$u(n,0)|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;if((d|0)>1){h=b+60|0;i=j+4|0;b=b+72|0;f=j+20|0;e=1;do{g=$u(n,e)|0;if((e|0)<(k|0)){Iu(g,0);op(($u(n,e)|0)+12|0,0)}else{a[j>>0]=a[m>>0]|0;g=Lg(24,j,g)|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;c[g+20>>2]=0;rv(g)}if(!(c[($u(n,e)|0)>>2]|0)){bv(j);g=Ji(h)|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[f>>2]=c[(sv(b)|0)>>2];cv($u(n,e)|0,j)}e=e+1|0}while((e|0)<(d|0))}l=o;return}Cb(12952,12849,460,12997)}function qv(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))uv(a,tv(a,b)|0);c[a>>2]=b;return}function rv(a){a=a|0;js(a);Vr(a+12|0);return}function sv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function tv(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*24|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*24|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function vv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=a+100|0;if((c[j>>2]|0)>=2){wv(a,0);if(c[a>>2]|0?(c[(Is(a)|0)>>2]|0)==0:0)Js(a);if((c[j>>2]|0)>1){g=a+104|0;b=0;f=1;d=0;do{e=$u(g,f)|0;if(c[e>>2]|0?(c[(Is(e)|0)>>2]|0)==0:0)Js(e);d=(c[e>>2]|0)+d|0;b=(c[e+12>>2]|0)+b|0;f=f+1|0}while((f|0)<(c[j>>2]|0))}else{d=0;b=0}Iu(a,(c[a>>2]|0)+d|0);h=a+12|0;op(h,(c[h>>2]|0)+b|0);e=c[a+8>>2]|0;f=c[a>>2]|0;i=a+56|0;c[i>>2]=(c[a+20>>2]|0)+(c[h>>2]<<1)+(0-b<<1);if((c[j>>2]|0)>1){h=a+104|0;g=1;b=e+(f<<5)+(0-d<<5)|0;do{e=$u(h,g)|0;d=c[e>>2]|0;if(d){Zaa(b|0,c[e+8>>2]|0,d<<5|0)|0;b=b+(d<<5)|0}d=c[e+12>>2]|0;if(d|0){Zaa(c[i>>2]|0,c[e+20>>2]|0,d<<1|0)|0;c[i>>2]=(c[i>>2]|0)+(d<<1)}g=g+1|0}while((g|0)<(c[j>>2]|0))}dv(a);c[j>>2]=1}return}function wv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((c[a+100>>2]|0)<=(b|0))Cb(13016,12849,527,13037);d=a+96|0;e=c[d>>2]|0;if((e|0)!=(b|0)){f=a+112|0;g=(c[f>>2]|0)+(e*24|0)|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];g=(c[f>>2]|0)+((c[d>>2]|0)*24|0)+12|0;e=a+12|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[d>>2]=b;d=c[f>>2]|0;f=d+(b*24|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=d+(b*24|0)+12|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[a+56>>2]=(c[a+20>>2]|0)+(c[e>>2]<<1)}return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=(c[a+8>>2]|0)+((c[a>>2]|0)+-1<<5)|0;c[f>>2]=(c[f>>2]|0)+b;f=a+24|0;e=c[f>>2]|0;Ju(f,e+d|0);c[a+52>>2]=(c[a+32>>2]|0)+(e*20|0);e=a+12|0;d=c[e>>2]|0;op(e,d+b|0);c[a+56>>2]=(c[a+20>>2]|0)+(d<<1);return}function yv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+16|0;o=h+8|0;n=h;df(o,+g[e>>2],+g[d+4>>2]);df(n,+g[d>>2],+g[e+4>>2]);k=c[a+40>>2]|0;m=c[k>>2]|0;k=c[k+4>>2]|0;j=a+48|0;p=c[j>>2]|0;s=p&65535;i=a+56|0;q=c[i>>2]|0;b[q>>1]=s;b[q+2>>1]=p+1;r=p+2&65535;b[q+4>>1]=r;b[q+6>>1]=s;b[q+8>>1]=r;b[q+10>>1]=p+3;a=a+52|0;q=d;d=c[q+4>>2]|0;p=c[a>>2]|0;c[p>>2]=c[q>>2];c[p+4>>2]=d;p=(c[a>>2]|0)+8|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+16>>2]=f;d=o;o=c[d+4>>2]|0;p=p+20|0;c[p>>2]=c[d>>2];c[p+4>>2]=o;p=(c[a>>2]|0)+28|0;c[p>>2]=m;c[p+4>>2]=k;p=c[a>>2]|0;c[p+36>>2]=f;o=e;d=c[o+4>>2]|0;e=p+40|0;c[e>>2]=c[o>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+48|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+56>>2]=f;d=c[n+4>>2]|0;e=e+60|0;c[e>>2]=c[n>>2];c[e+4>>2]=d;e=(c[a>>2]|0)+68|0;c[e>>2]=m;c[e+4>>2]=k;e=c[a>>2]|0;c[e+76>>2]=f;c[a>>2]=e+80;c[j>>2]=(c[j>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+12;l=h;return}function zv(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+32|0;q=j+24|0;o=j+16|0;p=j+8|0;n=j;df(q,+g[e>>2],+g[d+4>>2]);df(o,+g[d>>2],+g[e+4>>2]);df(p,+g[h>>2],+g[f+4>>2]);df(n,+g[f>>2],+g[h+4>>2]);m=a+48|0;r=c[m>>2]|0;u=r&65535;k=a+56|0;s=c[k>>2]|0;b[s>>1]=u;b[s+2>>1]=r+1;t=r+2&65535;b[s+4>>1]=t;b[s+6>>1]=u;b[s+8>>1]=t;b[s+10>>1]=r+3;a=a+52|0;s=d;d=c[s+4>>2]|0;r=c[a>>2]|0;c[r>>2]=c[s>>2];c[r+4>>2]=d;r=f;f=c[r+4>>2]|0;d=(c[a>>2]|0)+8|0;c[d>>2]=c[r>>2];c[d+4>>2]=f;d=c[a>>2]|0;c[d+16>>2]=i;f=c[q+4>>2]|0;d=d+20|0;c[d>>2]=c[q>>2];c[d+4>>2]=f;d=c[p+4>>2]|0;f=(c[a>>2]|0)+28|0;c[f>>2]=c[p>>2];c[f+4>>2]=d;f=c[a>>2]|0;c[f+36>>2]=i;d=e;e=c[d+4>>2]|0;f=f+40|0;c[f>>2]=c[d>>2];c[f+4>>2]=e;f=h;h=c[f+4>>2]|0;e=(c[a>>2]|0)+48|0;c[e>>2]=c[f>>2];c[e+4>>2]=h;e=c[a>>2]|0;c[e+56>>2]=i;h=o;f=c[h+4>>2]|0;e=e+60|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;e=n;f=c[e+4>>2]|0;h=(c[a>>2]|0)+68|0;c[h>>2]=c[e>>2];c[h+4>>2]=f;h=c[a>>2]|0;c[h+76>>2]=i;c[a>>2]=h+80;c[m>>2]=(c[m>>2]|0)+4;c[k>>2]=(c[k>>2]|0)+12;l=j;return}function Av(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=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,D=0,E=0,F=0.0,G=0,H=0,I=0;E=l;l=l+32|0;A=E+16|0;w=E+8|0;t=E+24|0;u=E;a:do if((e|0)>=2){D=c[a+40>>2]|0;C=c[D>>2]|0;D=c[D+4>>2]|0;n=e+-1|0;x=h?e:n;k=i>1.0;if(!(c[a+36>>2]&1)){xv(a,x*6|0,x<<2);i=i*.5;m=A+4|0;n=a+52|0;h=a+48|0;k=a+56|0;j=0;while(1){a=j;j=j+1|0;y=(j|0)==(e|0)?0:j;z=d+(a<<3)|0;w=d+(y<<3)|0;Bv(A,w,z);Dv(A,+Cv(A));s=i*+g[A>>2];r=i*+g[m>>2];B=c[n>>2]|0;g[B>>2]=+g[z>>2]+r;a=d+(a<<3)+4|0;g[B+4>>2]=+g[a>>2]-s;B=B+8|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+16>>2]=f;g[B+20>>2]=r+ +g[w>>2];y=d+(y<<3)+4|0;g[B+24>>2]=+g[y>>2]-s;B=B+28|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+36>>2]=f;g[B+40>>2]=+g[w>>2]-r;g[B+44>>2]=s+ +g[y>>2];B=B+48|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+56>>2]=f;g[B+60>>2]=+g[z>>2]-r;g[B+64>>2]=s+ +g[a>>2];B=B+68|0;c[B>>2]=C;c[B+4>>2]=D;B=c[n>>2]|0;c[B+76>>2]=f;c[n>>2]=B+80;B=c[h>>2]|0;a=B&65535;z=c[k>>2]|0;b[z>>1]=a;b[z+2>>1]=B+1;y=B+2&65535;b[z+4>>1]=y;b[z+6>>1]=a;b[z+8>>1]=y;b[z+10>>1]=B+3;c[k>>2]=z+12;c[h>>2]=B+4;if((j|0)==(x|0))break a}}y=f&16777215;z=O(k?18:12,x)|0;B=O(k?4:3,e)|0;xv(a,z,B);z=O(e<<3,k?5:3)|0;v=l;l=l+((1*z|0)+15&-16)|0;z=v+(e<<3)|0;m=A+4|0;j=0;do{q=j;j=j+1|0;Bv(A,d+(((j|0)==(e|0)?0:j)<<3)|0,d+(q<<3)|0);Dv(A,+Cv(A));c[v+(q<<3)>>2]=c[m>>2];g[v+(q<<3)+4>>2]=-+g[A>>2]}while((j|0)!=(x|0));if(!h){o=v+(e+-2<<3)|0;p=c[o+4>>2]|0;q=v+(n<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}if(k){s=(i+-1.0)*.5;if(!h){r=s+1.0;Ev(w,v,r);Fv(A,d,w);o=A;p=c[o+4>>2]|0;q=z;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,s);Fv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+8|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;Ev(w,v,s);Bv(A,d,w);o=A;p=c[o+4>>2]|0;q=z+16|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;Ev(w,v,r);Bv(A,d,w);q=A;p=c[q+4>>2]|0;o=z+24|0;c[o>>2]=c[q>>2];c[o+4>>2]=p;o=d+(n<<3)|0;p=v+(n<<3)|0;Ev(w,p,r);Fv(A,o,w);q=n<<2;m=A;n=c[m+4>>2]|0;h=z+(q<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,s);Fv(A,o,w);h=A;n=c[h+4>>2]|0;m=z+((q|1)<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=n;Ev(w,p,s);Bv(A,o,w);m=A;n=c[m+4>>2]|0;h=z+((q|2)<<3)|0;c[h>>2]=c[m>>2];c[h+4>>2]=n;Ev(w,p,r);Bv(A,o,w);o=A;p=c[o+4>>2]|0;q=z+((q|3)<<3)|0;c[q>>2]=c[o>>2];c[q+4>>2]=p}j=a+48|0;h=A+4|0;r=s+1.0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;q=(n|0)==(e|0);p=q?0:n;if(q)q=c[j>>2]|0;else q=m+4|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Ev(w,A,r);Ev(t,A,s);I=d+(p<<3)|0;Fv(u,I,w);H=p<<2;k=u;G=c[k+4>>2]|0;p=z+(H<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Fv(u,I,t);p=u;G=c[p+4>>2]|0;k=z+((H|1)<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=G;Bv(u,I,t);k=u;G=c[k+4>>2]|0;p=z+((H|2)<<3)|0;c[p>>2]=c[k>>2];c[p+4>>2]=G;Bv(u,I,w);I=u;p=c[I+4>>2]|0;H=z+((H|3)<<3)|0;c[H>>2]=c[I>>2];c[H+4>>2]=p;H=q+1&65535;p=c[o>>2]|0;b[p>>1]=H;I=m+1&65535;b[p+2>>1]=I;G=m+2&65535;b[p+4>>1]=G;b[p+6>>1]=G;k=q+2&65535;b[p+8>>1]=k;b[p+10>>1]=H;b[p+12>>1]=H;b[p+14>>1]=I;I=m&65535;b[p+16>>1]=I;b[p+18>>1]=I;b[p+20>>1]=q;b[p+22>>1]=H;b[p+24>>1]=k;b[p+26>>1]=G;m=m+3&65535;b[p+28>>1]=m;b[p+30>>1]=m;b[p+32>>1]=q+3;b[p+34>>1]=k;c[o>>2]=p+36;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{G=k<<2;d=z+(G<<3)|0;H=c[d+4>>2]|0;I=n;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=y;H=z+((G|1)<<3)|0;d=c[H+4>>2]|0;I=I+20|0;c[I>>2]=c[H>>2];c[I+4>>2]=d;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=f;d=z+((G|2)<<3)|0;H=c[d+4>>2]|0;I=I+40|0;c[I>>2]=c[d>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=f;G=z+((G|3)<<3)|0;H=c[G+4>>2]|0;I=I+60|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+68|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+76>>2]=y;n=I+80|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}else{if(!h){Ev(w,v,1.0);Fv(A,d,w);G=A;H=c[G+4>>2]|0;I=z;c[I>>2]=c[G>>2];c[I+4>>2]=H;Ev(w,v,1.0);Bv(A,d,w);I=A;H=c[I+4>>2]|0;G=z+8|0;c[G>>2]=c[I>>2];c[G+4>>2]=H;G=d+(n<<3)|0;H=v+(n<<3)|0;Ev(w,H,1.0);Fv(A,G,w);I=n<<1;q=A;t=c[q+4>>2]|0;u=z+(I<<3)|0;c[u>>2]=c[q>>2];c[u+4>>2]=t;Ev(w,H,1.0);Bv(A,G,w);G=A;H=c[G+4>>2]|0;I=z+((I|1)<<3)|0;c[I>>2]=c[G>>2];c[I+4>>2]=H}j=a+48|0;h=A+4|0;o=a+56|0;m=c[j>>2]|0;n=0;while(1){k=n;n=n+1|0;I=(n|0)==(e|0);p=I?0:n;if(I)q=c[j>>2]|0;else q=m+3|0;Fv(w,v+(k<<3)|0,v+(p<<3)|0);Ev(A,w,.5);i=+g[A>>2];F=+g[h>>2];F=i*i+F*F;i=1.0/F;if(F>9.999999974752427e-07)Dv(A,i>100.0?100.0:i);Dv(A,1.0);u=d+(p<<3)|0;Fv(w,u,A);G=p<<1;t=w;H=c[t+4>>2]|0;I=z+(G<<3)|0;c[I>>2]=c[t>>2];c[I+4>>2]=H;Bv(w,u,A);u=w;I=c[u+4>>2]|0;G=z+((G|1)<<3)|0;c[G>>2]=c[u>>2];c[G+4>>2]=I;G=q&65535;I=c[o>>2]|0;b[I>>1]=G;u=m&65535;b[I+2>>1]=u;H=m+2&65535;b[I+4>>1]=H;b[I+6>>1]=H;b[I+8>>1]=q+2;b[I+10>>1]=G;H=q+1&65535;b[I+12>>1]=H;b[I+14>>1]=m+1;b[I+16>>1]=u;b[I+18>>1]=u;b[I+20>>1]=G;b[I+22>>1]=H;c[o>>2]=I+24;if((n|0)==(x|0))break;else m=q}if((e|0)>0){m=a+52|0;k=0;n=c[m>>2]|0;do{A=d+(k<<3)|0;G=c[A+4>>2]|0;I=n;c[I>>2]=c[A>>2];c[I+4>>2]=G;I=(c[m>>2]|0)+8|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+16>>2]=f;G=k<<1;A=z+(G<<3)|0;H=c[A+4>>2]|0;I=I+20|0;c[I>>2]=c[A>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+28|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+36>>2]=y;G=z+((G|1)<<3)|0;H=c[G+4>>2]|0;I=I+40|0;c[I>>2]=c[G>>2];c[I+4>>2]=H;I=(c[m>>2]|0)+48|0;c[I>>2]=C;c[I+4>>2]=D;I=c[m>>2]|0;c[I+56>>2]=y;n=I+60|0;c[m>>2]=n;k=k+1|0}while((k|0)!=(e|0))}}c[j>>2]=(c[j>>2]|0)+(B&65535)}while(0);l=E;return}function Bv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function Cv(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];b=c*c+b*b;if(b>0.0)b=1.0/+C(+b);else b=1.0;return +b}function Dv(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function Ev(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function Fv(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function Gv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,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.0,C=0;z=l;l=l+16|0;v=z+8|0;w=z;y=c[a+40>>2]|0;x=c[y>>2]|0;y=c[y+4>>2]|0;if(!(c[a+36>>2]&2)){p=(e*3|0)+-6|0;xv(a,p,e);if((e|0)>0){i=a+52|0;h=0;j=c[i>>2]|0;do{u=d+(h<<3)|0;v=c[u+4>>2]|0;w=j;c[w>>2]=c[u>>2];c[w+4>>2]=v;w=(c[i>>2]|0)+8|0;c[w>>2]=x;c[w+4>>2]=y;w=c[i>>2]|0;c[w+16>>2]=f;j=w+20|0;c[i>>2]=j;h=h+1|0}while((h|0)!=(e|0));if((e|0)>2){h=a+48|0;n=c[h>>2]|0;o=n&65535;k=a+56|0;j=c[k>>2]|0;i=2;m=j;while(1){b[m>>1]=o;b[m+2>>1]=i+65535+n;b[m+4>>1]=n+i;i=i+1|0;if((i|0)==(e|0))break;else m=m+6|0}c[k>>2]=j+(p<<1)}else r=18}else r=18;if((r|0)==18)h=a+48|0;i=h;h=e&65535}else{r=f&16777215;u=e<<1;xv(a,(e*9|0)+-6|0,u);i=a+48|0;s=c[i>>2]|0;t=s+1|0;if((e|0)>2){k=s&65535;m=a+56|0;n=s+65534|0;j=c[m>>2]|0;o=(e*3|0)+-6|0;h=2;p=j;while(1){b[p>>1]=k;A=h<<1;b[p+2>>1]=n+A;b[p+4>>1]=A+s;h=h+1|0;if((h|0)==(e|0))break;else p=p+6|0}c[m>>2]=j+(o<<1)}p=l;l=l+((1*(e<<3)|0)+15&-16)|0;o=e+-1|0;k=(e|0)>0;if(k){m=v+4|0;h=o;j=0;while(1){Bv(v,d+(j<<3)|0,d+(h<<3)|0);Dv(v,+Cv(v));c[p+(h<<3)>>2]=c[m>>2];g[p+(h<<3)+4>>2]=-+g[v>>2];h=j+1|0;if((h|0)==(e|0))break;else{A=j;j=h;h=A}}if(k){m=v+4|0;n=a+52|0;k=a+56|0;h=o;j=0;while(1){Fv(w,p+(h<<3)|0,p+(j<<3)|0);Ev(v,w,.5);q=+g[v>>2];B=+g[m>>2];B=q*q+B*B;q=1.0/B;if(B>9.999999974752427e-07)Dv(v,q>100.0?100.0:q);Dv(v,.5);A=d+(j<<3)|0;Bv(w,A,v);C=w;o=c[C+4>>2]|0;a=c[n>>2]|0;c[a>>2]=c[C>>2];c[a+4>>2]=o;a=(c[n>>2]|0)+8|0;c[a>>2]=x;c[a+4>>2]=y;c[(c[n>>2]|0)+16>>2]=f;Fv(w,A,v);A=w;a=c[A+4>>2]|0;o=(c[n>>2]|0)+20|0;c[o>>2]=c[A>>2];c[o+4>>2]=a;o=(c[n>>2]|0)+28|0;c[o>>2]=x;c[o+4>>2]=y;o=c[n>>2]|0;c[o+36>>2]=r;c[n>>2]=o+40;o=j<<1;a=o+s&65535;A=c[k>>2]|0;b[A>>1]=a;h=h<<1;b[A+2>>1]=h+s;h=h+t&65535;b[A+4>>1]=h;b[A+6>>1]=h;b[A+8>>1]=o+t;b[A+10>>1]=a;c[k>>2]=A+12;h=j+1|0;if((h|0)==(e|0))break;else{C=j;j=h;h=C}}}}h=u&65534}c[i>>2]=(c[i>>2]|0)+h;l=z;return}function Hv(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;j=m;k=a+84|0;if(d==0.0|(f|0)<(e|0))Ns(k,b);else{Os(k,1-e+f+(c[k>>2]|0)|0);h=a+40|0;i=b+4|0;a=e;while(1){n=c[h>>2]|0;e=(a|0)%12|0;df(j,+g[b>>2]+ +g[n+36+(e<<3)>>2]*d,+g[i>>2]+ +g[n+36+(e<<3)+4>>2]*d);Ns(k,j);if((a|0)<(f|0))a=a+1|0;else break}}l=m;return}function Iv(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+16|0;m=n;k=a+84|0;if(!(d==0.0)){j=h+1|0;Os(k,j+(c[k>>2]|0)|0);if((h|0)>=0){i=+(h|0);f=f-e;h=b+4|0;a=0;do{o=f*(+(a|0)/i)+e;p=+g[b>>2]+ +E(+o)*d;df(m,p,+g[h>>2]+ +F(+o)*d);Ns(k,m);a=a+1|0}while((a|0)!=(j|0))}}else Ns(k,b);l=n;return}function Jv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0;q=l;l=l+16|0;o=q;p=a+84|0;k=Kv(p)|0;m=+g[k>>2];n=+g[k+4>>2];if(f){h=1.0/+(f|0);if((f|0)>=1){i=b+4|0;j=d+4|0;k=e+4|0;a=1;while(1){r=h*+(a|0);t=1.0-r;u=t*(t*t);s=t*3.0;t=r*(t*s);s=r*(r*s);r=r*(r*r);df(o,m*u+t*+g[b>>2]+s*+g[d>>2]+r*+g[e>>2],n*u+t*+g[i>>2]+s*+g[j>>2]+r*+g[k>>2]);Ns(p,o);if((a|0)==(f|0))break;else a=a+1|0}}}else Lv(p,m,n,+g[b>>2],+g[b+4>>2],+g[d>>2],+g[d+4>>2],+g[e>>2],+g[e+4>>2],+g[(c[a+40>>2]|0)+16>>2],0);l=q;return}function Kv(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<3)|0;else Cb(37253,37262,1040,13011);return 0}function Lv(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;n=l;l=l+16|0;m=n;p=h-b;o=i-c;r=(d-h)*o-p*(e-i);q=(f-h)*o-p*(g-i);q=(r>=0.0?r:-r)+(q>=0.0?q:-q);if(!(q*q<(p*p+o*o)*j)){if((k|0)<10){t=(b+d)*.5;s=(c+e)*.5;o=(d+f)*.5;p=(e+g)*.5;q=(f+h)*.5;r=(g+i)*.5;d=(t+o)*.5;e=(s+p)*.5;o=(o+q)*.5;p=(p+r)*.5;f=(d+o)*.5;g=(e+p)*.5;m=k+1|0;Lv(a,b,c,t,s,d,e,f,g,j,m);Lv(a,f,g,o,p,q,r,h,i,j,m)}}else{df(m,h,i);Ns(a,m)}l=n;return}function Mv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,h=0,i=0.0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;j=m;k=+g[b>>2];n=+B(+(+g[c>>2]-k));n=+Nv(d,((e&3|0)==3|(e&12|0)==12?.5:1.0)*n+-1.0);f=c+4|0;h=b+4|0;d=+g[h>>2];i=+B(+(+g[f>>2]-d));i=+Nv(n,((e&5|0)==5|(e&10|0)==10?.5:1.0)*i+-1.0);if((e|0)==0|i<=0.0){ij(a,b);df(j,+g[c>>2],+g[h>>2]);ij(a,j);ij(a,c);df(j,+g[b>>2],+g[f>>2]);ij(a,j)}else{q=e&1|0?i:0.0;p=e&2|0?i:0.0;o=e&8|0?i:0.0;n=e&4|0?i:0.0;df(j,q+k,q+d);Hv(a,j,q,6,9);df(j,+g[c>>2]-p,p+ +g[h>>2]);Hv(a,j,p,9,12);df(j,+g[c>>2]-o,+g[f>>2]-o);Hv(a,j,o,0,3);df(j,n+ +g[b>>2],+g[f>>2]-n);Hv(a,j,n,3,6)}l=m;return}function Nv(a,b){a=+a;b=+b;return +(a>>0>=16777216){df(g,.5,.5);Fv(f,b,g);ij(a,f);df(g,.5,.5);Fv(f,c,g);ij(a,f);jj(a,d,0,e)}l=h;return}function Pv(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+24|0;j=m+16|0;k=m+8|0;h=m;if(d>>>0>=16777216){df(j,.5,.5);Fv(i,b,j);df(h,.5,.5);Bv(k,c,h);Mv(a,i,k,e,f);jj(a,d,1,g)}l=m;return}function Qv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;do if(d>>>0>=16777216)if(e>0.0){Mv(a,b,c,e,f);rl(a,d);break}else{xv(a,6,4);yv(a,b,c,d);break}while(0);return}function Rv(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;m=l;l=l+16|0;j=m;k=m+8|0;if((f|e|h|i)>>>0>=16777216){p=c[a+40>>2]|0;o=c[p+4>>2]|0;n=j;c[n>>2]=c[p>>2];c[n+4>>2]=o;xv(a,6,4);n=a+48|0;Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+1&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,c[n>>2]&65535);Gt(a,(c[n>>2]|0)+2&65535);Gt(a,(c[n>>2]|0)+3&65535);Ht(a,b,j,e);df(k,+g[d>>2],+g[b+4>>2]);Ht(a,k,j,f);Ht(a,d,j,h);df(k,+g[b>>2],+g[d+4>>2]);Ht(a,k,j,i)}l=m;return}function Sv(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;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);jj(a,f,1,g)}return}function Tv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(f>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);ij(a,e);rl(a,f)}return}function Uv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);jj(a,e,1,f)}return}function Vv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(e>>>0>=16777216){ij(a,b);ij(a,c);ij(a,d);rl(a,e)}return}function Wv(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0.0;if(d>>>0>=16777216){g=+(e|0);Iv(a,b,c+-.5,0.0,(g+-1.0)*6.2831854820251465/g,e);jj(a,d,1,f)}return}function Xv(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0.0;f=+(e|0);if(d>>>0>=16777216){Iv(a,b,c,0.0,(f+-1.0)*6.2831854820251465/f,e);rl(a,d)}return}function Yv(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;if(f>>>0>=16777216){ij(a,b);Jv(a,c,d,e,h);jj(a,f,0,g)}return}function Zv(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+32|0;p=q+24|0;o=q+8|0;n=q;if(f>>>0>=16777216){if(!i)i=h+(c8(h)|0)|0;if((i|0)!=(h|0)){if(!b)b=c[(c[a+40>>2]|0)+8>>2]|0;if(d==0.0)d=+g[(c[a+40>>2]|0)+12>>2];m=c[c[b+68>>2]>>2]|0;if((m|0)!=(c[(sv(a+72|0)|0)>>2]|0))Cb(13056,12849,1104,37082);m=Ji(a+60|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];m=(k|0)!=0;if(m){g[o>>2]=+gv(+g[o>>2],+g[k>>2]);r=o+4|0;g[r>>2]=+gv(+g[r>>2],+g[k+4>>2]);r=o+8|0;g[r>>2]=+Nv(+g[r>>2],+g[k+8>>2]);r=o+12|0;g[r>>2]=+Nv(+g[r>>2],+g[k+12>>2])}k=c[e+4>>2]|0;r=n;c[r>>2]=c[e>>2];c[r+4>>2]=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];_v(b,a,d,p,f,o,h,i,j,m)}}l=q;return}function _v(d,e,f,h,i,j,k,m,n,o){d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=+n;o=o|0;var p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0;W=l;l=l+16|0;T=W;if(!m)R=k+(c8(k)|0)|0;else R=m;r=+g[d+8>>2]+ +(~~+g[h>>2]|0);g[h>>2]=r;S=h+4|0;t=+g[d+12>>2]+ +(~~+g[S>>2]|0);g[S>>2]=t;S=j+12|0;if(!(t>+g[S>>2])){P=+g[d>>2];O=f/P;P=P*O;Q=n>0.0;a:do if(!Q?(R>>>0>k>>>0?t+P<+g[j+4>>2]:0):0){m=k;while(1){if((a[m>>0]|0)==10){p=m;break a}m=m+1|0;if(m>>>0>=R>>>0){p=m;break}}}else p=k;while(0);L=R-p|0;I=L*6|0;J=e+12|0;K=c[J>>2]|0;xv(e,I,L<<2);L=e+52|0;m=c[L>>2]|0;M=e+56|0;k=c[M>>2]|0;N=e+48|0;b:do if(p>>>0>>0){G=j+4|0;H=j+8|0;F=c[N>>2]|0;f=t;y=0;c:while(1){t=r;u=f;s=y;q=p;while(1){if(!Q){s=y;break}if(!s){s=$v(d,O,q,R,n-(t-+g[h>>2]))|0;s=(s|0)==(q|0)?s+1|0:s}if(q>>>0>>0){r=t;f=u;p=q;break}t=+g[h>>2];u=P+u;do{if(q>>>0>=R>>>0)break;X=a[q>>0]|0;s=aw(X<<24>>24)|0;q=s|X<<24>>24==10?q+1|0:q}while(s);if(q>>>0>=R>>>0)break b;else s=0}X=a[p>>0]|0;q=X<<24>>24;c[T>>2]=q;if(X<<24>>24<=-1){p=p+(Hf(T,p,R)|0)|0;q=c[T>>2]|0;if(!q)break}else p=p+1|0;d:do if(q>>>0<32){switch(q|0){case 13:{q=F;break d}case 10:break;default:{V=29;break d}}r=+g[h>>2];f=P+f;if(f>+g[S>>2])break c;if(!Q?(p>>>0>>0?P+f<+g[G>>2]:0):0)while(1){if((a[p>>0]|0)==10){q=F;break d}p=p+1|0;if(p>>>0>=R>>>0){q=F;break}}else q=F}else V=29;while(0);e:do if((V|0)==29){V=0;q=bw(d,q&65535)|0;f:do if(q){t=O*+g[q+4>>2];switch(c[T>>2]|0){case 9:case 32:{q=F;break f}default:{}}u=r+O*+g[q+8>>2];w=r+O*+g[q+16>>2];z=f+O*+g[q+12>>2];E=f+O*+g[q+20>>2];D=+g[H>>2];if(u<=D?(U=+g[j>>2],w>=U):0){x=+g[q+24>>2];B=+g[q+28>>2];A=+g[q+32>>2];v=+g[q+36>>2];do if(o){if(u>2];if(zD){A=C+(A-C)*((D-u)/(w-u));w=D}x=+g[S>>2];if(E>x)v=B+(v-B)*((x-z)/(E-z));else x=E;if(!(z>=x))break;q=F;r=r+t;break e}else{C=x;x=E}while(0);X=F&65535;b[k>>1]=X;b[k+2>>1]=F+1;q=F+2&65535;b[k+4>>1]=q;b[k+6>>1]=X;b[k+8>>1]=q;b[k+10>>1]=F+3;g[m>>2]=u;g[m+4>>2]=z;c[m+16>>2]=i;g[m+8>>2]=C;g[m+12>>2]=B;g[m+20>>2]=w;g[m+24>>2]=z;c[m+36>>2]=i;g[m+28>>2]=A;g[m+32>>2]=B;g[m+40>>2]=w;g[m+44>>2]=x;c[m+56>>2]=i;g[m+48>>2]=A;g[m+52>>2]=v;g[m+60>>2]=u;g[m+64>>2]=x;c[m+76>>2]=i;g[m+68>>2]=C;g[m+72>>2]=v;q=F+4|0;k=k+12|0;m=m+80|0}else q=F}else{t=0.0;q=F}while(0);r=r+t}while(0);if(p>>>0>>0){F=q;y=s}else break b}}while(0);X=e+24|0;Ju(X,(m-(c[e+32>>2]|0)|0)/20|0);op(J,k-(c[e+20>>2]|0)>>1);V=c[J>>2]|0;e=cw(e,(c[e>>2]|0)+-1|0)|0;c[e>>2]=V-(I+K)+(c[e>>2]|0);c[L>>2]=m;c[M>>2]=k;c[N>>2]=c[X>>2]}l=W;return}function $v(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=+h;var i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0;v=l;l=l+16|0;u=v;t=h/d;a:do if(e>>>0>>0){s=b+28|0;r=b+56|0;b=e;k=1;o=0;q=e;d=0.0;h=0.0;j=0.0;b:while(1){c:while(1){p=a[b>>0]|0;e=p<<24>>24;c[u>>2]=e;if(p<<24>>24>-1)i=1;else{i=Hf(u,b,f)|0;e=c[u>>2]|0}p=b+i|0;if(!e){e=7;break b}if(e>>>0>=32)break;switch(e|0){case 10:{e=1;h=0.0;d=0.0;j=0.0;break}case 13:{e=k;break}default:break c}if(p>>>0>>0){b=p;k=e}else{b=p;break a}}if((e|0)<(c[s>>2]|0)){i=Et(s,e)|0;n=c[u>>2]|0}else{i=r;n=e}m=+g[i>>2];d:do if(aw(n)|0){n=0;i=k?b:q;m=(k?0.0:d)+m;j=k?j+d:j}else{h=h+m;j=k?j:j+(d+h);h=k?h:0.0;d=k?d:0.0;i=k?p:q;e=k?o:q;switch(n|0){case 34:case 33:case 44:case 46:case 59:case 63:{n=0;o=e;m=d;break d}default:{}}n=1;o=e;m=d}while(0);if(j+h>=t){e=18;break}if(p>>>0>>0){b=p;k=n<<24>>24!=0;q=i;d=m}else{b=p;break a}}if((e|0)==7)break;else if((e|0)==18){b=h=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function bw(a,d){a=a|0;d=d|0;var e=0,f=0;d=d&65535;e=a+40|0;if((c[e>>2]|0)>(d|0)?(f=b[(Bt(e,d)|0)>>1]|0,f<<16>>16!=-1):0)d=(c[a+24>>2]|0)+((f&65535)*40|0)|0;else d=c[a+52>>2]|0;return d|0}function cw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<5)|0;else Cb(12740,37262,1030,12749);return 0}function dw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Zv(a,0,0.0,b,c,d,e,0.0,0);return}function ew(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;k=l;l=l+16|0;i=k;c[i>>2]=b;do if(h>>>0>=16777216){j=a+72|0;if(!(fw(j)|0)?(c[(sv(j)|0)>>2]|0)==(b|0):0){xv(a,6,4);zv(a,d,e,f,g,h);break}lv(a,i);xv(a,6,4);zv(a,d,e,f,g,h);nv(a)}while(0);l=k;return}function fw(a){a=a|0;return (c[a>>2]|0)==0|0}function gw(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function hw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;k=l;l=l+16|0;i=k;j=a+8|0;d=c[j>>2]|0;if((d|0)>0){f=a+4|0;h=b+4|0;e=0;a=d;do{d=c[(c[f>>2]|0)+(e<<2)>>2]|0;if((c[d>>2]|0)>0){a=0;do{n=cw(d,a)|0;m=n+4|0;p=+g[b>>2];o=+g[h>>2];Of(i,+g[m>>2]*p,+g[n+8>>2]*o,p*+g[n+12>>2],o*+g[n+16>>2]);c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];a=a+1|0}while((a|0)<(c[d>>2]|0));a=c[j>>2]|0}e=e+1|0}while((e|0)<(a|0))}l=k;return}function iw(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0;q=l;l=l+16|0;o=q+8|0;p=q;Bv(o,e,d);n=1.0/+jw(o);if(a>>>0>>0){i=f&255;j=g&255;k=f>>>8&255;m=g>>>8&255;h=f>>>16&255;f=g>>>16&255;e=a;do{Bv(p,e,d);r=+gw(n*+kw(p,o),0.0,1.0);g=lw(i,j,r)|0;a=lw(k,m,r)|0;g=a<<8|g|(lw(h,f,r)|0)<<16;a=e+16|0;c[a>>2]=g|c[a>>2]&-16777216;e=e+20|0}while(e>>>0>>0)}l=q;return}function jw(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function kw(a,b){a=a|0;b=b|0;return +(+g[a>>2]*+g[b>>2]+ +g[a+4>>2]*+g[b+4>>2])}function lw(a,b,c){a=a|0;b=b|0;c=+c;return ~~(+(b-a|0)*c+ +(a|0))|0}function mw(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;e=l;l=l+16|0;h=e;f=b+32|0;bf(f);d=b+40|0;bf(d);c[b>>2]=0;c[b+4>>2]=0;a[b+8>>0]=1;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+20>>2]=3;c[b+24>>2]=1;a[b+28>>0]=0;df(h,0.0,0.0);j=h;i=c[j+4>>2]|0;c[f>>2]=c[j>>2];c[f+4>>2]=i;df(h,0.0,0.0);f=c[h+4>>2]|0;c[d>>2]=c[h>>2];c[d+4>>2]=f;c[b+48>>2]=0;a[b+52>>0]=0;c[b+56>>2]=0;g[b+60>>2]=1.0;b=b+64|0;d=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function nw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=a+28|0;bf(d);yr(a+36|0);ow(a+48|0);pw(a+60|0);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;df(f,0.0,0.0);e=c[f+4>>2]|0;c[d>>2]=c[f>>2];c[d+4>>2]=e;c[a+72>>2]=-1;l=b;return}function ow(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function pw(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function qw(a){a=a|0;rw(a);sw(a+60|0);tw(a+48|0);Rr(a+36|0);return}function rw(a){a=a|0;uw(a);vw(a);ww(a);return}function sw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function tw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function uw(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;h=d+60|0;if((c[h>>2]|0)>0){e=0;do{if(c[(Dw(h,e)|0)>>2]|0?a[(Dw(h,e)|0)+8>>0]|0:0){_f(c[(Dw(h,e)|0)>>2]|0);c[(Dw(h,e)|0)>>2]=0}e=e+1|0}while((e|0)<(c[h>>2]|0))}f=d+36|0;if((c[f>>2]|0)>0){g=d+68|0;e=0;do{i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0;if(i>>>0>=(c[g>>2]|0)>>>0?(i=c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]|0,i>>>0<((c[g>>2]|0)+((c[h>>2]|0)*100|0)|0)>>>0):0){c[(c[(Hh(f,e)|0)>>2]|0)+64>>2]=0;b[(c[(Hh(f,e)|0)>>2]|0)+62>>1]=0}e=e+1|0}while((e|0)<(c[f>>2]|0))}Ew(h);Fw(d+48|0);c[d+72>>2]=-1;return}function vw(a){a=a|0;var b=0,d=0;d=a+12|0;b=c[d>>2]|0;if(b|0)_f(b);a=a+16|0;b=c[a>>2]|0;if(b|0)_f(b);c[d>>2]=0;c[a>>2]=0;return}function ww(a){a=a|0;var b=0;b=a+36|0;if((c[b>>2]|0)>0){a=0;do{xw(Hh(b,a)|0);a=a+1|0}while((a|0)<(c[b>>2]|0))}wi(b);return}function xw(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){yw(b);_f(c[a>>2]|0);c[a>>2]=0}return}function yw(a){a=a|0;zw(a);Wr(a+40|0);gs(a+28|0);Aw(a+16|0);return}function zw(a){a=a|0;var d=0;g[a>>2]=0.0;Bw(a+16|0);Cw(a+28|0);Ai(a+40|0);c[a+52>>2]=0;g[a+56>>2]=0.0;a=a+62|0;d=a+22|0;do{b[a>>1]=0;a=a+2|0}while((a|0)<(d|0));return}function Aw(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Bw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Cw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Dw(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*100|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ew(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Fw(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Gw(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;h=a+12|0;g=c[h>>2]|0;if(!g){if(Hw(a+60|0)|0)Iw(a,0)|0;Jw(a)|0;g=c[h>>2]|0}c[b>>2]=g;if(d|0)c[d>>2]=c[a+20>>2];if(e|0)c[e>>2]=c[a+24>>2];if(f|0)c[f>>2]=1;return}function Hw(a){a=a|0;return (c[a>>2]|0)==0|0}function Iw(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0;j=l;l=l+112|0;i=j;if(!d){mw(i);c[i+24>>2]=1;c[i+20>>2]=1;a[i+28>>0]=1}else{f=i;h=f+100|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(h|0))}f=i+64|0;if(!(a[f>>0]|0)){d=17770;h=f+22|0;do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((f|0)<(h|0))}f=i+16|0;e=+g[f>>2];if(e<=0.0){g[f>>2]=13.0;e=13.0}i=Vy(b,17792,e,i,4776)|0;l=j;return i|0}function Jw(a){a=a|0;return Kw(a)|0}function Kw(d){d=d|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=l;l=l+352|0;D=U;M=U+88|0;N=U+84|0;P=U+80|0;Q=U+48|0;R=U+44|0;S=U+40|0;T=d+60|0;if((c[T>>2]|0)<=0)Cb(13110,12849,1631,13137);Lw(d);c[d>>2]=0;K=d+24|0;c[K>>2]=0;L=d+20|0;c[L>>2]=0;df(D,0.0,0.0);H=D;I=c[H+4>>2]|0;J=d+28|0;c[J>>2]=c[H>>2];c[J+4>>2]=I;vw(d);if((c[T>>2]|0)>0){m=0;f=0;n=0;while(1){h=(Dw(T,n)|0)+48|0;i=c[h>>2]|0;if(!i){c[h>>2]=4776;i=4776}k=b[i>>1]|0;a:do if(!(k<<16>>16))h=m;else{h=m;m=k;do{k=b[i+2>>1]|0;if(!(k<<16>>16))break a;h=h+1-(m&65535)+(k&65535)|0;i=i+4|0;f=f+1|0;m=b[i>>1]|0}while(m<<16>>16!=0)}while(0);n=n+1|0;if((n|0)>=(c[T>>2]|0)){x=h;w=f;break}else m=h}}else{x=0;w=0}f=c[d+4>>2]|0;if((f|0)<=0)if((x|0)>4e3)f=4096;else f=(x|0)>2e3?2048:(x|0)>1e3?1024:512;c[L>>2]=f;c[K>>2]=0;h=D;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));Mw(D,f,c[d+8>>2]|0);Nw(D,1,1);v=D+4|0;Ow(d,c[v>>2]|0);J=Bf((c[T>>2]|0)*136|0)|0;b:do if((c[T>>2]|0)>0){k=0;while(1){i=Dw(T,k)|0;f=i+96|0;h=c[f>>2]|0;if(!h){I=18;break}if(Ih(h)|0?(c[(c[f>>2]|0)+68>>2]|0)!=(d|0):0){I=18;break}h=c[i>>2]|0;f=Pw(h,c[i+12>>2]|0)|0;if((f|0)<=-1){I=20;break}if(!(Qw(J+(k*136|0)|0,h,f)|0)){I=22;break}k=k+1|0;if((k|0)>=(c[T>>2]|0)){I=23;break b}}if((I|0)==18)Cb(13169,12849,1680,13137);else if((I|0)==20)Cb(13251,12849,1683,13137);else if((I|0)==22){_f(J);o=0;break}}else I=23;while(0);if((I|0)==23){s=x*28|0;G=Bf(s)|0;t=x<<4;y=Bf(t)|0;u=w*24|0;H=Bf(u)|0;$aa(G|0,0,s|0)|0;$aa(y|0,0,t|0)|0;$aa(H|0,0,u|0)|0;c:do if((c[T>>2]|0)>0){i=0;s=0;o=0;u=0;while(1){t=Dw(T,u)|0;r=c[t+48>>2]|0;f=b[r>>1]|0;d:do if(!(f<<16>>16)){m=0;k=0}else{m=0;k=0;n=r;while(1){h=b[n+2>>1]|0;if(!(h<<16>>16))break d;h=m+1-(f&65535)+(h&65535)|0;n=n+4|0;k=k+1|0;f=b[n>>1]|0;if(!(f<<16>>16)){m=h;break}else m=h}}while(0);n=H+(o*24|0)|0;p=J+(u*136|0)+128|0;c[p>>2]=n;q=J+(u*136|0)+132|0;c[q>>2]=k;o=k+o|0;if((k|0)>0){h=c[t+16>>2]|0;f=0;do{W=r+(f<<1<<1)|0;c[n+(f*24|0)>>2]=h;V=e[W>>1]|0;c[n+(f*24|0)+4>>2]=V;V=(e[W+2>>1]|0)-V+1|0;c[n+(f*24|0)+12>>2]=V;c[n+(f*24|0)+16>>2]=G+(i*28|0);i=V+i|0;f=f+1|0}while((f|0)!=(k|0))}f=J+(u*136|0)+120|0;c[f>>2]=y+(s<<4);c[J+(u*136|0)+124>>2]=m;k=m+s|0;Nw(D,c[t+20>>2]|0,c[t+24>>2]|0);if((Rw(D,J+(u*136|0)|0,c[p>>2]|0,c[q>>2]|0,c[f>>2]|0)|0)!=(m|0))break;Sw(c[v>>2]|0,c[f>>2]|0,m);if((m|0)>0){h=c[f>>2]|0;f=0;do{if(c[h+(f<<4)+12>>2]|0)c[K>>2]=Tw(c[K>>2]|0,(e[h+(f<<4)+6>>1]|0)+(e[h+(f<<4)+10>>1]|0)|0)|0;f=f+1|0}while((f|0)!=(m|0))}u=u+1|0;if((u|0)>=(c[T>>2]|0)){z=i;B=k;C=o;break c}else s=k}Cb(13268,12849,1731,13137)}else{z=0;B=0;C=0}while(0);if((B|0)!=(x|0))Cb(13291,12849,1739,13137);if((z|0)!=(x|0))Cb(13325,12849,1740,13137);if((C|0)!=(w|0))Cb(13365,12849,1741,13137);o=Uw(c[K>>2]|0)|0;c[K>>2]=o;o=Bf(O(c[L>>2]|0,o)|0)|0;W=d+12|0;c[W>>2]=o;$aa(o|0,0,O(c[K>>2]|0,c[L>>2]|0)|0)|0;o=D+32|0;c[o>>2]=c[W>>2];c[D+12>>2]=c[K>>2];if((c[T>>2]|0)>0){p=D+16|0;n=0;do{W=Dw(T,n)|0;Nw(D,c[W+20>>2]|0,c[W+24>>2]|0);q=J+(n*136|0)+120|0;Ww(D,J+(n*136|0)|0,c[J+(n*136|0)+128>>2]|0,c[J+(n*136|0)+132>>2]|0,c[q>>2]|0);j=+g[W+60>>2];if(j!=1.0?(Xw(M,j),E=J+(n*136|0)+124|0,F=c[E>>2]|0,F|0):0){h=c[q>>2]|0;k=c[o>>2]|0;m=c[p>>2]|0;i=h;f=F;do{if(c[i+12>>2]|0){Yw(M,k,e[i+8>>1]|0,e[i+10>>1]|0,e[i+4>>1]|0,e[i+6>>1]|0,m);h=c[q>>2]|0;f=c[E>>2]|0}i=i+16|0}while((i|0)!=(h+(f<<4)|0))}c[q>>2]=0;n=n+1|0}while((n|0)<(c[T>>2]|0))}Vw(D);_f(y);if((c[T>>2]|0)>0){s=Q+4|0;t=Q+16|0;u=Q+20|0;v=Q+8|0;w=Q+12|0;x=Q+24|0;y=Q+28|0;r=0;do{f=Dw(T,r)|0;z=c[f+96>>2]|0;B=J+(r*136|0)|0;j=+_w(B,+g[f+16>>2]);$w(B,M,N,P);ax(d,z,f,j*+(c[M>>2]|0),j*+(c[N>>2]|0));j=+g[f+40>>2];A=+g[f+44>>2]+ +(~~(+g[z+72>>2]+.5)|0);B=J+(r*136|0)+132|0;h=c[B>>2]|0;if((h|0)>0){C=J+(r*136|0)+128|0;q=f+52|0;p=0;f=h;do{h=c[C>>2]|0;o=h+(p*24|0)+12|0;if((c[o>>2]|0)>0){n=h+(p*24|0)+16|0;i=h+(p*24|0)+4|0;f=0;do{k=c[n>>2]|0;do if(!(b[k+(f*28|0)>>1]|0)){if(b[k+(f*28|0)+4>>1]|0){I=69;break}if(b[k+(f*28|0)+2>>1]|0){I=69;break}if(b[k+(f*28|0)+6>>1]|0)I=69}else I=69;while(0);do if((I|0)==69){I=0;h=(c[i>>2]|0)+f&65535;if(!(a[q>>0]|0))m=k;else{if(bw(z,h)|0)break;m=c[n>>2]|0}g[R>>2]=0.0;g[S>>2]=0.0;bx(m,c[L>>2]|0,c[K>>2]|0,f,R,S,Q);cx(z,h,j+ +g[Q>>2],A+ +g[s>>2],j+ +g[t>>2],A+ +g[u>>2],+g[v>>2],+g[w>>2],+g[x>>2],+g[y>>2],+g[k+(f*28|0)+16>>2])}while(0);f=f+1|0}while((f|0)<(c[o>>2]|0));f=c[B>>2]|0}p=p+1|0}while((p|0)<(f|0))}r=r+1|0}while((r|0)<(c[T>>2]|0))}_f(G);_f(H);_f(J);Zw(d);o=1}l=U;return o|0}function Lw(a){a=a|0;var b=0;b=a+72|0;if((c[b>>2]|0)<0)c[b>>2]=Qy(a,-2147483648,181,27)|0;return}function Mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=Bf(48)|0;f=b-d|0;g=Bf(f<<3)|0;h=(e|0)==0;i=(g|0)==0;if(h|i){if(!h)_f(e);if(!i)_f(g)}else{c[a>>2]=0;c[a+8>>2]=b;c[a+12>>2]=32768;c[a+32>>2]=0;c[a+4>>2]=e;c[a+36>>2]=g;c[a+20>>2]=d;c[a+16>>2]=b;c[a+24>>2]=1;c[a+28>>2]=1;Oy(e,f,32768-d|0,g,f)}return}function Nw(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0>=9)Cb(17559,16307,3427,17577);if(d>>>0<9){c[a+24>>2]=b;c[a+28>>2]=d;return}else Cb(17603,16307,3428,17577)}function Ow(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;g=i;h=a+48|0;if((c[h>>2]|0)<=0)Cb(17424,12849,1846,17445);Iy(g);Jy(g,c[h>>2]|0);$aa(c[g+8>>2]|0,0,c[h>>2]<<4|0)|0;if((c[h>>2]|0)>0){f=0;do{j=b[(jx(h,f)|0)+4>>1]|0;b[(Ky(g,f)|0)+4>>1]=j;j=b[(jx(h,f)|0)+6>>1]|0;b[(Ky(g,f)|0)+6>>1]=j;f=f+1|0}while((f|0)<(c[h>>2]|0))}j=Ky(g,0)|0;Sw(d,j,c[g>>2]|0);a:do if((c[g>>2]|0)>0){a=a+24|0;f=0;while(1){if(c[(Ky(g,f)|0)+12>>2]|0){j=b[(Ky(g,f)|0)+8>>1]|0;b[(jx(h,f)|0)+8>>1]=j;j=b[(Ky(g,f)|0)+10>>1]|0;b[(jx(h,f)|0)+10>>1]=j;j=b[(Ky(g,f)|0)+4>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+4>>1]|0))break;j=b[(Ky(g,f)|0)+6>>1]|0;if(j<<16>>16!=(b[(jx(h,f)|0)+6>>1]|0))break;d=c[a>>2]|0;j=b[(Ky(g,f)|0)+10>>1]|0;c[a>>2]=Tw(d,(e[(Ky(g,f)|0)+6>>1]|0)+(j&65535)|0)|0}f=f+1|0;if((f|0)>=(c[g>>2]|0))break a}Cb(17477,12849,1862,17445)}while(0);Ly(g);l=i;return}function Pw(a,b){a=a|0;b=b|0;return Fy(a,b)|0}function Qw(a,b,c){a=a|0;b=b|0;c=c|0;return Dy(a,b,c)|0}function Rw(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,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=l;l=l+16|0;u=y+12|0;v=y+8|0;w=y+4|0;x=y;if((h|0)>0){s=d+24|0;t=d+28|0;r=d+20|0;d=0;q=0;do{j=+g[f+(q*24|0)>>2];if(j>0.0)j=+_w(e,j);else j=+tx(e,-j);a[f+(q*24|0)+20>>0]=c[s>>2];a[f+(q*24|0)+21>>0]=c[t>>2];n=f+(q*24|0)+12|0;if((c[n>>2]|0)>0){o=f+(q*24|0)+8|0;p=f+(q*24|0)+4|0;m=0;do{k=c[o>>2]|0;if(!k)k=(c[p>>2]|0)+m|0;else k=c[k+(m<<2)>>2]|0;k=vx(e,k)|0;Cx(e,k,j*+((c[s>>2]|0)>>>0),j*+((c[t>>2]|0)>>>0),u,v,w,x);k=c[r>>2]|0;b[i+(d<<4)+4>>1]=(c[w>>2]|0)+65535-(c[u>>2]|0)+k+(c[s>>2]|0);b[i+(d<<4)+6>>1]=(c[x>>2]|0)+65535-(c[v>>2]|0)+k+(c[t>>2]|0);d=d+1|0;m=m+1|0}while((m|0)<(c[n>>2]|0))}q=q+1|0}while((q|0)!=(h|0))}else d=0;l=y;return d|0}function Sw(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;m=p;n=(e|0)>0;if(n){f=0;do{c[d+(f<<4)+12>>2]=f;f=f+1|0}while((f|0)!=(e|0));S7(d,e,16,3);if(n){i=m+8|0;j=m+4|0;h=0;do{f=b[d+(h<<4)+4>>1]|0;if(f<<16>>16!=0?(k=b[d+(h<<4)+6>>1]|0,k<<16>>16!=0):0){zy(m,a,f&65535,k&65535);if(!(c[i>>2]|0)){f=-1;g=-1}else{f=c[m>>2]&65535;g=c[j>>2]&65535}b[d+(h<<4)+10>>1]=g;b[d+(h<<4)+8>>1]=f}else{b[d+(h<<4)+10>>1]=0;b[d+(h<<4)+8>>1]=0}h=h+1|0}while((h|0)!=(e|0));S7(d,e,16,4);if(n){f=0;do{if((b[d+(f<<4)+8>>1]|0)==-1)g=(b[d+(f<<4)+10>>1]|0)==-1;else g=0;c[d+(f<<4)+12>>2]=(g^1)&1;f=f+1|0}while((f|0)!=(e|0))}}else o=13}else{S7(d,e,16,3);o=13}if((o|0)==13)S7(d,e,16,4);l=p;return}function Tw(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function Uw(a){a=a|0;a=a+-1|0;a=a>>1|a;a=a>>2|a;a=a>>4|a;a=a>>8|a;return (a>>16|a)+1|0}function Vw(a){a=a|0;_f(c[a+36>>2]|0);_f(c[a+4>>2]|0);return}function Ww(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.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,P=0,Q=0,R=0,S=0,T=0,U=0;Q=l;l=l+32|0;K=Q+20|0;L=Q+16|0;M=Q+12|0;N=Q+8|0;P=Q+4|0;D=Q;E=d+24|0;F=c[E>>2]|0;G=d+28|0;H=c[G>>2]|0;if((i|0)>0){I=d+20|0;J=d+32|0;C=d+16|0;B=0;d=0;do{k=+g[h+(B*24|0)>>2];if(k>0.0)A=+_w(f,k);else A=+tx(f,-k);y=a[h+(B*24|0)+20>>0]|0;m=y&255;c[E>>2]=m;z=a[h+(B*24|0)+21>>0]|0;w=z&255;c[G>>2]=w;k=1.0/+(y&255);t=1.0/+(z&255);u=+ux(m);v=+ux(w);w=h+(B*24|0)+12|0;m=c[w>>2]|0;if((m|0)>0){x=h+(B*24|0)+16|0;y=h+(B*24|0)+8|0;z=h+(B*24|0)+4|0;s=0;do{if(c[j+(d<<4)+12>>2]|0){r=c[x>>2]|0;m=c[y>>2]|0;if(!m)m=(c[z>>2]|0)+s|0;else m=c[m+(s<<2)>>2]|0;m=vx(f,m)|0;T=c[I>>2]|0;n=j+(d<<4)+8|0;b[n>>1]=T+(e[n>>1]|0);o=j+(d<<4)+10|0;b[o>>1]=T+(e[o>>1]|0);p=j+(d<<4)+4|0;b[p>>1]=(e[p>>1]|0)-T;q=j+(d<<4)+6|0;b[q>>1]=(e[q>>1]|0)-T;wx(f,m,K,L);xx(f,m,A*+((c[E>>2]|0)>>>0),A*+((c[G>>2]|0)>>>0),M,N,P,D);T=c[C>>2]|0;U=(c[J>>2]|0)+(e[n>>1]|0)+(O(T,e[o>>1]|0)|0)|0;S=c[E>>2]|0;R=c[G>>2]|0;yx(f,U,1-S+(e[p>>1]|0)|0,1-R+(e[q>>1]|0)|0,T,A*+(S>>>0),A*+(R>>>0),m);m=c[E>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;zx(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=c[G>>2]|0;if(m>>>0>1){U=c[C>>2]|0;T=(c[J>>2]|0)+(e[n>>1]|0)+(O(U,e[o>>1]|0)|0)|0;Ax(T,e[p>>1]|0,e[q>>1]|0,U,m)}m=b[n>>1]|0;b[r+(s*28|0)>>1]=m;S=b[o>>1]|0;b[r+(s*28|0)+2>>1]=S;T=e[p>>1]|0;b[r+(s*28|0)+4>>1]=T+(m&65535);m=e[q>>1]|0;b[r+(s*28|0)+6>>1]=m+(S&65535);g[r+(s*28|0)+16>>2]=A*+(c[K>>2]|0);S=c[M>>2]|0;g[r+(s*28|0)+8>>2]=u+k*+(S|0);U=c[N>>2]|0;g[r+(s*28|0)+12>>2]=v+t*+(U|0);g[r+(s*28|0)+20>>2]=u+k*+(S+T|0);g[r+(s*28|0)+24>>2]=v+t*+(U+m|0);m=c[w>>2]|0}d=d+1|0;s=s+1|0}while((s|0)<(m|0))}B=B+1|0}while((B|0)!=(i|0))}c[E>>2]=F;c[G>>2]=H;l=Q;return}function Xw(b,c){b=b|0;c=+c;var d=0,e=0;d=0;do{e=~~(+(d>>>0)*c)>>>0;a[b+d>>0]=e>>>0<255?e:255;d=d+1|0}while((d|0)!=256);return}function Yw(b,c,e,f,g,h,i){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0;if((h|0)>0){k=(g|0)>0;j=h;h=c+e+(O(i,f)|0)|0;while(1){if(k){c=0;do{f=h+c|0;a[f>>0]=a[b+(d[f>>0]|0)>>0]|0;c=c+1|0}while((c|0)!=(g|0))}if((j|0)>1){j=j+-1|0;h=h+i|0}else break}}return}function Zw(a){a=a|0;var b=0,d=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0;o=l;l=l+16|0;d=o+8|0;j=o;ix(a);k=a+48|0;a:do if((c[k>>2]|0)>0){m=d+4|0;n=j+4|0;b=0;while(1){f=jx(k,b)|0;h=f+24|0;i=c[h>>2]|0;if(i|0?(c[f>>2]|0)>>>0<=65536:0){if((c[i+68>>2]|0)!=(a|0))break;bf(d);bf(j);kx(a,f,d,j);q=+g[f+16>>2];p=+g[f+20>>2];cx(c[h>>2]|0,c[f>>2]&65535,q,p,q+ +(e[f+4>>1]|0),p+ +(e[f+6>>1]|0),+g[d>>2],+g[m>>2],+g[j>>2],+g[n>>2],+g[f+12>>2])}b=b+1|0;if((b|0)>=(c[k>>2]|0))break a}Cb(13400,12849,1918,13432)}while(0);a=a+36|0;if((c[a>>2]|0)>0){b=0;do{lx(c[(Hh(a,b)|0)>>2]|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}l=o;return}function _w(a,b){a=a|0;b=+b;var d=0;a=(c[a+4>>2]|0)+(c[a+28>>2]|0)|0;d=(hx(a+4|0)|0)<<16>>16;return +(b/+(d-((hx(a+6|0)|0)<<16>>16)|0))}function $w(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(b|0)c[b>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+4|0)|0)<<16>>16;if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+6|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+(c[a+28>>2]|0)+8|0)|0)<<16>>16;return}function ax(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=+h;i=+i;if(!(a[f+52>>0]|0)){zw(e);c[e>>2]=c[f+16>>2];c[e+64>>2]=f;c[e+68>>2]=d;g[e+72>>2]=h;g[e+76>>2]=i}f=e+62|0;b[f>>1]=(b[f>>1]|0)+1<<16>>16;return}function bx(a,b,c,d,f,h,i){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0;k=1.0/+(b|0);j=1.0/+(c|0);g[i>>2]=+g[f>>2]+ +g[a+(d*28|0)+8>>2];g[i+4>>2]=+g[h>>2]+ +g[a+(d*28|0)+12>>2];g[i+16>>2]=+g[f>>2]+ +g[a+(d*28|0)+20>>2];g[i+20>>2]=+g[h>>2]+ +g[a+(d*28|0)+24>>2];g[i+8>>2]=k*+(e[a+(d*28|0)>>1]|0);g[i+12>>2]=j*+(e[a+(d*28|0)+2>>1]|0);g[i+24>>2]=k*+(e[a+(d*28|0)+4>>1]|0);g[i+28>>2]=j*+(e[a+(d*28|0)+6>>1]|0);g[f>>2]=+g[a+(d*28|0)+16>>2]+ +g[f>>2];return}function cx(d,e,f,h,i,j,k,l,m,n,o){d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0,q=0;q=d+16|0;dx(q,(c[q>>2]|0)+1|0);q=ex(q)|0;b[q>>1]=e;g[q+8>>2]=f;g[q+12>>2]=h;g[q+16>>2]=i;g[q+20>>2]=j;g[q+24>>2]=k;g[q+28>>2]=l;g[q+32>>2]=m;g[q+36>>2]=n;p=c[d+64>>2]|0;o=+g[p+32>>2]+o;e=q+4|0;g[e>>2]=o;if(a[p+28>>0]|0)g[e>>2]=+(~~(o+.5)|0);p=c[d+68>>2]|0;p=O(~~((n-l)*+(c[p+24>>2]|0)+1.9900000095367432),~~((m-k)*+(c[p+20>>2]|0)+1.9900000095367432))|0;q=d+80|0;c[q>>2]=p+(c[q>>2]|0);return}function dx(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))gx(a,fx(a,b)|0);c[a>>2]=b;return}function ex(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function fx(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*40|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*40|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function hx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function ix(d){d=d|0;var 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;u=l;l=l+48|0;p=u+32|0;q=u+16|0;r=u+8|0;s=u;t=u+24|0;f=c[d+72>>2]|0;if((f|0)<=-1)Cb(13606,12849,1869,13635);f=jx(d+48|0,f)|0;if((c[f>>2]|0)!=-2147483648)Cb(13672,12849,1871,13635);if((b[f+4>>1]|0)!=181)Cb(13711,12849,1872,13635);if((b[f+6>>1]|0)!=27)Cb(13761,12849,1873,13635);if(!(rx(f)|0))Cb(13803,12849,1874,13635);m=d+12|0;if(!(c[m>>2]|0))Cb(13816,12849,1875,13635);o=f+8|0;n=f+10|0;k=d+20|0;f=0;i=0;while(1){h=0;j=f;while(1){v=h+(e[o>>1]|0)+(O(i+(e[n>>1]|0)|0,c[k>>2]|0)|0)|0;w=a[13845+j>>0]|0;a[(c[m>>2]|0)+v>>0]=(w<<24>>24==46)<<31>>31;a[(c[m>>2]|0)+(v+91)>>0]=(w<<24>>24==88)<<31>>31;h=h+1|0;if((h|0)==90)break;else j=j+1|0}i=i+1|0;if((i|0)==27)break;else f=f+90|0}df(p,1.0/+(c[k>>2]|0),1.0/+(c[d+24>>2]|0));df(q,+g[p>>2]*(+(e[o>>1]|0)+.5),+g[p+4>>2]*(+(e[n>>1]|0)+.5));v=q;w=c[v+4>>2]|0;f=d+28|0;c[f>>2]=c[v>>2];c[f+4>>2]=w;f=0;do{w=c[244]|0;df(r,+(e[o>>1]|0),+(e[n>>1]|0));Fv(q,1328+(f*24|0)|0,r);v=1328+(f*24|0)+8|0;m=c[v>>2]|0;v=c[v+4>>2]|0;d=r;c[d>>2]=m;c[d+4>>2]=v;c[w+6532+(f*52|0)>>2]=f;d=w+6532+(f*52|0)+12|0;c[d>>2]=m;c[d+4>>2]=v;d=1328+(f*24|0)+16|0;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+4|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+20|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;m=w+6532+(f*52|0)+36|0;c[m>>2]=c[d>>2];c[m+4>>2]=v;g[q>>2]=+g[q>>2]+91.0;sx(s,q,p);m=s;v=c[m+4>>2]|0;d=w+6532+(f*52|0)+28|0;c[d>>2]=c[m>>2];c[d+4>>2]=v;Fv(t,q,r);sx(s,t,p);d=s;v=c[d+4>>2]|0;w=w+6532+(f*52|0)+44|0;c[w>>2]=c[d>>2];c[w+4>>2]=v;f=f+1|0}while((f|0)!=7);l=u;return}function jx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function kx(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;j=l;l=l+16|0;g=j;h=a+20|0;if((c[h>>2]|0)>0?(i=a+24|0,(c[i>>2]|0)>0):0)if(rx(b)|0){k=b+8|0;a=b+10|0;df(g,+(e[k>>1]|0)/+(c[h>>2]|0),+(e[a>>1]|0)/+(c[i>>2]|0));n=g;m=c[n+4>>2]|0;c[d>>2]=c[n>>2];c[d+4>>2]=m;df(g,+((e[b+4>>1]|0)+(e[k>>1]|0)|0)/+(c[h>>2]|0),+((e[b+6>>1]|0)+(e[a>>1]|0)|0)/+(c[i>>2]|0));h=c[g+4>>2]|0;i=f;c[i>>2]=c[g>>2];c[i+4>>2]=h;l=j;return}else Cb(13589,12849,1602,13572);Cb(13542,12849,1601,13572)}function lx(a){a=a|0;var d=0,f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=a+16|0;if(c[l>>2]|0){d=0;f=0;while(1){d=Tw(d,e[(mx(l,f)|0)>>1]|0)|0;i=f+1|0;if((i|0)==(c[l>>2]|0))break;else f=i}if((f|0)<65534)o=d;else Cb(13455,12849,2140,13476)}else o=0;m=a+28|0;Cw(m);k=a+40|0;Ai(k);n=o+1|0;nx(a,n);if((c[l>>2]|0)>0){d=0;do{j=e[(mx(l,d)|0)>>1]|0;i=c[(mx(l,d)|0)+4>>2]|0;c[(ox(m,j)|0)>>2]=i;b[(vt(k,j)|0)>>1]=d;d=d+1|0}while((d|0)<(c[l>>2]|0))}if(bw(a,32)|0){if((b[(ex(l)|0)>>1]|0)!=9)dx(l,(c[l>>2]|0)+1|0);d=ex(l)|0;f=d;i=bw(a,32)|0;j=f+40|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));b[d>>1]=9;j=d+4|0;h=+g[j>>2]*4.0;g[j>>2]=h;g[(ox(m,9)|0)>>2]=h;l=(c[l>>2]|0)+65535&65535;b[(vt(k,e[d>>1]|0)|0)>>1]=l}l=a+52|0;c[l>>2]=0;d=bw(a,b[a+60>>1]|0)|0;c[l>>2]=d;if(!d)h=0.0;else h=+g[d+4>>2];f=a+56|0;g[f>>2]=h;if((o|0)>=0){d=0;do{if(+g[(ox(m,d)|0)>>2]<0.0){o=c[f>>2]|0;c[(ox(m,d)|0)>>2]=o}d=d+1|0}while((d|0)!=(n|0))}return}function mx(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*40|0)|0;else Cb(12740,37262,1030,12749);return 0}function nx(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0;i=l;l=l+16|0;e=i;f=a+28|0;h=c[f>>2]|0;a=a+40|0;if((h|0)!=(c[a>>2]|0))Cb(13493,12849,2181,13532);if((h|0)<(d|0)){g[e>>2]=-1.0;px(f,d,e);b[e>>1]=-1;qx(a,d,e)}l=i;return}function ox(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);e=c[a>>2]|0;if((e|0)<(b|0)){f=c[a+8>>2]|0;do{c[f+(e<<2)>>2]=c[d>>2];e=e+1|0}while((e|0)!=(b|0))}c[a>>2]=b;return}function qx(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;if((c[a+4>>2]|0)<(d|0))zu(a,Au(a,d)|0);f=c[a>>2]|0;if((f|0)<(d|0)){g=c[a+8>>2]|0;do{b[g+(f<<1)>>1]=b[e>>1]|0;f=f+1|0}while((f|0)!=(d|0))}c[a>>2]=d;return}function rx(a){a=a|0;return (b[a+8>>1]|0)!=-1|0}function sx(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function tx(a,b){a=a|0;b=+b;return +(b/+((Wx((c[a+4>>2]|0)+(c[a+20>>2]|0)+18|0)|0)&65535))}function ux(a){a=a|0;var b=0.0;if(!a)b=0.0;else b=+(1-a|0)/(+(a|0)*2.0);return +b}function vx(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;m=c[a+4>>2]|0;l=c[a+40>>2]|0;h=m+l|0;a=Wx(h)|0;a:do switch(a<<16>>16){case 0:{if((((Wx(h+2|0)|0)&65535)+-6|0)>(b|0))e=d[h+6+b>>0]|0;else e=0;break}case 6:{a=(Wx(h+6|0)|0)&65535;if(a>>>0<=b>>>0?(((Wx(h+8|0)|0)&65535)+a|0)>>>0>b>>>0:0)e=(Wx(h+10+(b-a<<1)|0)|0)&65535;else e=0;break}case 2:{Cb(16777,16307,1346,17119);break}case 4:{k=Wx(h+6|0)|0;j=(k&65535)>>>1;if((b|0)>65535)e=0;else{a=Wx(h+12|0)|0;e=Wx(h+10|0)|0;g=m+(l+14)|0;a=a&-2&65535;i=((Wx(g+a|0)|0)&65535|0)>(b|0);a=l+12+(i?0:a)|0;if(e<<16>>16){f=Wx(h+8|0)|0;do{f=(f&65535)>>>1;i=f&32766;n=((Wx(m+a+i|0)|0)&65535|0)<(b|0);a=(n?i:0)+a|0;e=e+-1<<16>>16}while(e<<16>>16!=0)}i=131058-l+2+a&131070;if(((Wx(g+i|0)|0)&65535|0)<(b|0))Cb(17140,16307,1382,17119);h=h+14|0;g=j&65535;a=(Wx(h+(k&-2&65535)+2+i|0)|0)&65535;do if((a|0)<=(b|0)){e=g*6|0;f=Wx(h+e+2+i|0)|0;if(!(f<<16>>16)){a=((hx(h+(g<<2)+2+i|0)|0)&65535)+b&65535;break}else{a=Wx(m+(f&65535)+(b-a<<1)+l+14+e+2+i|0)|0;break}}else a=0;while(0);e=a&65535}break}default:{j=a<<16>>16==12;if((a&-2)<<16>>16!=12)Cb(16777,16307,1417,17119);i=h+16|0;a=Xx(h+12|0)|0;g=0;while(1){while(1){if((a|0)<=(g|0)){e=0;break a}h=(a-g>>1)+g|0;e=i+(h*12|0)|0;f=Xx(e)|0;if(f>>>0>b>>>0)a=h;else break}if((Xx(e+4|0)|0)>>>0>>0)g=h+1|0;else break}e=Xx(e+8|0)|0;e=e+(j?b-f|0:0)|0}}while(0);return e|0}function wx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=c[a+4>>2]|0;f=(Wx(h+(c[a+28>>2]|0)+34|0)|0)&65535;g=(d|0)!=0;if((f|0)>(b|0)){if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(b<<2)+2|0)|0)<<16>>16}else{if(g)c[d>>2]=(hx(h+(c[a+32>>2]|0)+((f<<2)+-4)|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx(h+(c[a+32>>2]|0)+(f<<2)+(b-f<<1)|0)|0)<<16>>16}return}function xx(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;Cx(a,b,c,d,e,f,g,h);return}function yx(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;h=+h;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+32|0;n=p+24|0;o=p+20|0;j=p+16|0;k=p;m=Bx(a,i,j)|0;Cx(a,i,g,h,n,o,0,0);c[k+12>>2]=b;c[k>>2]=d;c[k+4>>2]=e;c[k+8>>2]=f;if((d|0)==0|(e|0)==0)a=c[j>>2]|0;else{a=c[j>>2]|0;Dx(k,a,m,g,h,c[n>>2]|0,c[o>>2]|0)}_f(a);l=p;return}function zx(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((f|0)>0){n=(e-h|0)<0;o=e+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{i=0;j=0;do{k=b+j|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{i=0;j=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+j|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(e|0))do{k=b+j|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(e|0));m=m+1|0;if((m|0)>=(f|0))break a;else b=b+g|0}Cb(16347,16307,3490,16362)}while(0);l=q;return}function Ax(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=q;o=p;c[o>>2]=0;c[o+4>>2]=0;a:do if((e|0)>0){n=(f-h|0)<0;o=f+1-h|0;m=0;b:while(1){$aa(p|0,0,h|0)|0;switch(h|0){case 2:{if(n){i=0;j=0}else{j=0;i=0;do{k=b+(O(j,g)|0)|0;r=a[k>>0]|0;i=(r&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+2&7)>>0]=r;a[k>>0]=i>>>1;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 3:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+3&7)>>0]=k;a[r>>0]=(i>>>0)/3|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 4:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+4&7)>>0]=k;a[r>>0]=i>>>2;j=j+1|0}while((j|0)!=(o|0));j=o}break}case 5:{if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+5&7)>>0]=k;a[r>>0]=(i>>>0)/5|0;j=j+1|0}while((j|0)!=(o|0));j=o}break}default:if(n){i=0;j=0}else{j=0;i=0;do{r=b+(O(j,g)|0)|0;k=a[r>>0]|0;i=(k&255)-(d[p+(j&7)>>0]|0)+i|0;a[p+(j+h&7)>>0]=k;a[r>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)!=(o|0));j=o}}if((j|0)<(f|0))do{k=b+(O(j,g)|0)|0;if(a[k>>0]|0)break b;i=i-(d[p+(j&7)>>0]|0)|0;a[k>>0]=(i>>>0)/(h>>>0)|0;j=j+1|0}while((j|0)<(f|0));m=m+1|0;if((m|0)>=(e|0))break a;else b=b+1|0}Cb(16276,16307,3552,16328)}while(0);l=q;return}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a+56>>2]|0))a=vy(a,b,d)|0;else a=wy(a,b,d)|0;return a|0}function Cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=+d;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;n=p+12|0;o=p+8|0;j=p+4|0;k=p;c[n>>2]=0;c[o>>2]=0;m=(f|0)!=0;if(!(Tx(a,b,n,o,j,k)|0)){if(m)c[f>>2]=0;if(g|0)c[g>>2]=0;if(h|0)c[h>>2]=0;if(i|0)c[i>>2]=0}else{if(m)c[f>>2]=~~+A(+(+(c[n>>2]|0)*d+0.0));if(g|0)c[g>>2]=~~+A(+(+(0-(c[k>>2]|0)|0)*e+0.0));if(h|0)c[h>>2]=~~+N(+(+(c[j>>2]|0)*d+0.0));if(i|0)c[i>>2]=~~+N(+(+(0-(c[o>>2]|0)|0)*e+0.0))}l=p;return}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0;k=l;l=l+16|0;i=k+4|0;j=k;b=Ex(b,d,.3499999940395355/(e>f?f:e),j,i)|0;if(b|0){j=c[j>>2]|0;Fx(a,b,j,c[i>>2]|0,e,f,g,h);_f(j);_f(b)}l=k;return}function Ex(d,e,f,g,h){d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0;t=l;l=l+16|0;s=t;c[s>>2]=0;q=f*f;r=(e|0)>0;a:do if(r){i=0;j=0;do{i=i+((a[d+(j*14|0)+12>>0]|0)==1&1)|0;j=j+1|0}while((j|0)!=(e|0));c[h>>2]=i;if(!i)i=0;else{p=Bf(i<<2)|0;c[g>>2]=p;if(!p){c[h>>2]=0;i=0;break}else{p=0;m=0;i=0}while(1){if((p|0)==1){i=Bf(c[s>>2]<<3)|0;if(!i)break}c[s>>2]=0;if(r){n=0.0;f=0.0;o=0;j=-1;do{k=d+(o*14|0)|0;switch(a[d+(o*14|0)+12>>0]|0){case 1:{if((j|0)>-1)c[(c[g>>2]|0)+(j<<2)>>2]=(c[s>>2]|0)-m;m=c[s>>2]|0;f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);c[s>>2]=m+1;Qx(i,m,f,n);j=j+1|0;break}case 2:{f=+(b[k>>1]|0);n=+(b[d+(o*14|0)+2>>1]|0);k=c[s>>2]|0;c[s>>2]=k+1;Qx(i,k,f,n);break}case 3:{u=d+(o*14|0)+2|0;Rx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}case 4:{u=d+(o*14|0)+2|0;Sx(i,s,f,n,+(b[d+(o*14|0)+4>>1]|0),+(b[d+(o*14|0)+6>>1]|0),+(b[d+(o*14|0)+8>>1]|0),+(b[d+(o*14|0)+10>>1]|0),+(b[k>>1]|0),+(b[u>>1]|0),q,0);n=+(b[u>>1]|0);f=+(b[k>>1]|0);break}default:{}}o=o+1|0}while((o|0)!=(e|0));k=c[s>>2]|0}else{j=-1;k=0}c[(c[g>>2]|0)+(j<<2)>>2]=k-m;if((p|0)<1)p=p+1|0;else break a}_f(0);_f(c[g>>2]|0);c[g>>2]=0;c[h>>2]=0;i=0}}else{c[h>>2]=0;i=0}while(0);l=t;return i|0}function Fx(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;w=-h;m=(e|0)>0;if(m){k=0;l=0;do{k=(c[d+(l<<2)>>2]|0)+k|0;l=l+1|0}while((l|0)!=(e|0));k=(k*20|0)+20|0}else k=20;v=Bf(k)|0;if(v|0){if(m){t=0;u=0;k=0;do{r=b+(t<<3)|0;s=d+(u<<2)|0;m=c[s>>2]|0;t=m+t|0;l=m+-1|0;if((m|0)>0){q=0;o=l;p=+g[r+(l<<3)+4>>2];while(1){n=p;p=+g[r+(q<<3)+4>>2];if(!(n==p)){l=v+(k*20|0)+16|0;c[l>>2]=0;h=+g[r+(o<<3)+4>>2];if(h>p){c[l>>2]=1;m=q;l=o;n=h;h=p}else{m=o;l=q;n=p}g[v+(k*20|0)>>2]=+g[r+(l<<3)>>2]*f+0.0;g[v+(k*20|0)+4>>2]=n*w+0.0;g[v+(k*20|0)+8>>2]=+g[r+(m<<3)>>2]*f+0.0;g[v+(k*20|0)+12>>2]=h*w+0.0;k=k+1|0;m=c[s>>2]|0}l=q+1|0;if((l|0)>=(m|0))break;else{o=q;q=l}}}u=u+1|0}while((u|0)!=(e|0))}else k=0;Gx(v,k);Hx(a,v,k,i,j);_f(v)}return}function Gx(a,b){a=a|0;b=b|0;Ox(a,b);Px(a,b);return}function Hx(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+544|0;y=A+520|0;v=A+516|0;z=A;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[v>>2]=0;i=c[b>>2]|0;if((i|0)>64){x=Bf(i<<3|4)|0;i=c[b>>2]|0}else x=z;t=x+(i<<2)|0;u=b+4|0;s=c[u>>2]|0;g[d+(e*20|0)+4>>2]=+(s+h|0)+1.0;a:do if((s|0)>0){q=t+4|0;r=b+12|0;s=b+8|0;p=0;m=0;b:while(1){o=+(h|0);n=o+1.0;$aa(x|0,0,i<<2|0)|0;$aa(t|0,0,(c[b>>2]<<2)+4|0)|0;c:do if(m|0){k=v;e=m;while(1){i=e;while(1){if(!(+g[i+24>>2]<=o))break;c[k>>2]=c[i>>2];e=i+16|0;if(!(+g[e>>2]!=0.0)){i=11;break b}g[e>>2]=0.0;Ix(y,i);i=c[k>>2]|0;if(!i)break c}e=c[i>>2]|0;if(!e)break;else k=i}}while(0);j=+g[d+4>>2];if(j<=n){i=d;while(1){if(j!=+g[i+12>>2]?(w=Jx(y,i,f,o)|0,w|0):0){if(!(+g[w+24>>2]>=o)){i=17;break b}c[w>>2]=c[v>>2];c[v>>2]=w}d=i+20|0;j=+g[i+24>>2];if(!(j<=n))break;else i=d}}i=c[v>>2]|0;if(i|0)Kx(x,q,c[b>>2]|0,i,o);i=c[b>>2]|0;if((i|0)>0){j=0.0;e=0;do{j=j+ +g[t+(e<<2)>>2];i=~~(+B(+(+g[x+(e<<2)>>2]+j))*255.0+.5);a[(c[r>>2]|0)+((O(c[s>>2]|0,p)|0)+e)>>0]=(i|0)<255?i:255;e=e+1|0;i=c[b>>2]|0}while((e|0)<(i|0))}m=c[v>>2]|0;if(m|0){e=m;do{k=e+4|0;g[k>>2]=+g[e+8>>2]+ +g[k>>2];e=c[e>>2]|0}while((e|0)!=0)}p=p+1|0;if((p|0)>=(c[u>>2]|0))break a;else h=h+1|0}if((i|0)==11)Cb(16381,16307,2774,16394);else if((i|0)==17)Cb(16424,16307,2787,16394)}while(0);Lx(y);if((x|0)!=(z|0))_f(x);l=A;return}function Ix(a,b){a=a|0;b=b|0;a=a+4|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0;a=Nx(a)|0;j=+g[b>>2];f=+g[b+12>>2];h=+g[b+4>>2];i=(+g[b+8>>2]-j)/(f-h);if(!a)Cb(16714,16307,2373,16722);else{g[a+8>>2]=i;g[a+12>>2]=i!=0.0?1.0/i:0.0;g[a+4>>2]=j+i*(e-h)-+(d|0);g[a+16>>2]=c[b+16>>2]|0?1.0:-1.0;g[a+20>>2]=h;g[a+24>>2]=f;c[a>>2]=0;return a|0}return 0}function Kx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0;x=f+1.0;a:do if(e|0){y=+(d|0);z=b+-4|0;A=(d|0)>0;b:while(1){i=+g[e+24>>2];if(!(i>=f)){e=4;break}s=+g[e+8>>2];u=+g[e+4>>2];do if(s==0.0){if(u=0.0)){Mx(z,0,e,u,f,u,x);break}else{q=~~u;Mx(a,q,e,u,f,u,x);Mx(z,q+1|0,e,u,f,u,x);break}}else{v=s+u;k=+g[e+12>>2];h=+g[e+20>>2];if(!(h<=x)){e=11;break b}q=h>f;t=q?h:f;m=q?u+s*(h-f):u;q=i=0.0&i>=0.0?m-1&(j|0)<(d|0))){e=17;break b}p=e+16|0;w=+(j|0);q=a+(j<<2)|0;g[q>>2]=+g[q>>2]+h*((1.0-(m-w+(i-w))*.5)*+g[p>>2]);q=b+(j<<2)|0;g[q>>2]=+g[q>>2]+h*+g[p>>2];break}if(m>i){h=v;k=-k;s=i;i=m;w=x-(r-f);v=x-(t-f)}else{h=u;s=m;w=t;v=r}p=~~s;l=~~i;n=p+1|0;t=k*(+(n|0)-h)+f;u=+g[e+16>>2];h=u*(t-w);q=a+(p<<2)|0;g[q>>2]=+g[q>>2]+(1.0-(s-+(p|0)+1.0)*.5)*h;m=k*u;if((n|0)<(l|0)){r=m*.5;j=n;do{q=a+(j<<2)|0;g[q>>2]=r+h+ +g[q>>2];h=m+h;j=j+1|0}while((j|0)!=(l|0))}if(!(+B(+h)<=1.0099999904632568)){e=25;break b}q=a+(l<<2)|0;g[q>>2]=u*(1.0-(i-+(l|0)+0.0)*.5)*(v-(k*+(l-n|0)+t))+h+ +g[q>>2];q=b+(l<<2)|0;g[q>>2]=(v-w)*u+ +g[q>>2];break}if(A){j=0;do{h=+(j|0);l=j;j=j+1|0;i=+(j|0);k=(h-u)/s+f;m=(i-u)/s+f;n=ui;do if(!(n&o)){p=vi;if(p&q){Mx(a,l,e,u,f,i,m);Mx(a,l,e,i,m,h,k);Mx(a,l,e,h,k,v,x);break}if(n&v>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(p&u>h){Mx(a,l,e,u,f,h,k);Mx(a,l,e,h,k,v,x);break}if(u>2]|0;if(!e)break a}if((e|0)==4)Cb(16444,16307,2585,16459);else if((e|0)==11)Cb(16488,16307,2604,16459);else if((e|0)==17)Cb(16524,16307,2632,16459);else if((e|0)==25)Cb(16542,16307,2669,16459)}while(0);return}function Lx(a){a=a|0;var b=0;a=c[a>>2]|0;if(a|0)do{b=a;a=c[a>>2]|0;_f(b)}while((a|0)!=0);return}function Mx(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;h=+h;var i=0.0,j=0.0,k=0.0,l=0.0;do if(!(e==h)){if(!(e>2];k=+g[c+24>>2];if(!(i<=k))Cb(16597,16307,2544,16570);if(!(i>h|ke){l=i;j=(f-d)*(i-e)/(h-e)+d}else{l=e;j=d}if(k=i)break;Cb(16622,16307,2559,16570)}if(j<=i){if(f<=i)break;Cb(16630,16307,2561,16570)}if(!(j>=d)){if(!(!(f>=i)|!(f<=d)))break;Cb(16648,16307,2565,16570)}else{if(f>=d)break;Cb(16638,16307,2563,16570)}}while(0);if(!(!(j<=i)|!(f<=i))){b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(e-l)*+g[c+16>>2];break}if(!(j>=d)|!(f>=d))if(!(f<=d)|(!(j>=i)|!(j<=d)|!(f>=i)))Cb(16669,16307,2572,16570);else{b=a+(b<<2)|0;g[b>>2]=+g[b>>2]+(1.0-(j-i+(f-i))*.5)*((e-l)*+g[c+16>>2]);break}}}while(0);return}function Nx(a){a=a|0;var b=0,d=0,e=0;d=a+4|0;b=c[d>>2]|0;do if(!b){e=a+8|0;b=c[e>>2]|0;if(!b){b=Bf(56004)|0;if(!b){b=0;break}c[b>>2]=c[a>>2];c[a>>2]=b;c[e>>2]=2e3;d=1999}else{d=b+-1|0;b=c[a>>2]|0}c[e>>2]=d;b=b+(d*28|0)|0}else c[d>>2]=c[b>>2];while(0);return b|0}function Ox(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0;n=l;l=l+32|0;m=n;if((b|0)>12)do{d=b>>>1;k=a+4|0;o=+g[k>>2];f=a+(d*20|0)|0;i=+g[a+(d*20|0)+4>>2];d=b+-1|0;p=+g[a+(d*20|0)+4>>2];j=i>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[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];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[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];c[m+16>>2]=c[a+16>>2];c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];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];e=d;d=1;while(1){i=+g[k>>2];while(1){j=d+1|0;if(+g[a+(d*20|0)+4>>2]>2])e=f;else break}h=a+(d*20|0)|0;if((d|0)>=(e|0))break;e=a+(e*20|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];c[h+16>>2]=c[e+16>>2];c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];e=f;d=j}b=b-d|0;if((e|0)<(b|0)){Ox(a,e);a=h}else{Ox(h,b);b=e}}while((b|0)>12);l=n;return}function Px(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;j=k;if((b|0)>1){f=1;do{h=c[a+(f*20|0)>>2]|0;i=+g[a+(f*20|0)+4>>2];d=a+(f*20|0)+8|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];d=f;while(1){e=d+-1|0;if(!(i<+g[a+(e*20|0)+4>>2]))break;n=a+(e*20|0)|0;m=a+(d*20|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];if((d|0)>1)d=e;else{d=e;break}}if((f|0)!=(d|0)){n=a+(d*20|0)+8|0;c[a+(d*20|0)>>2]=h;g[a+(d*20|0)+4>>2]=i;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2]}f=f+1|0}while((f|0)!=(b|0))}l=k;return}function Qx(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;if(a|0){g[a+(b<<3)>>2]=c;g[a+(b<<3)+4>>2]=d}return}function Rx(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;m=(f*2.0+d+h)*.25;l=(g*2.0+e+i)*.25;a:do if((k|0)<=16){o=d;p=e;q=g;n=(h+d)*.5-m;e=(i+e)*.5-l;while(1){if(!(n*n+e*e>j))break;r=k;k=k+1|0;Rx(a,b,o,p,(o+f)*.5,(p+q)*.5,m,l,j,k);f=(f+h)*.5;q=(q+i)*.5;g=(m+f*2.0+h)*.25;d=(l+q*2.0+i)*.25;if((r|0)>15)break a;else{p=l;o=m;n=(m+h)*.5-g;e=(l+i)*.5-d;m=g;l=d}}Qx(a,c[b>>2]|0,h,i);c[b>>2]=(c[b>>2]|0)+1}while(0);return}function Sx(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=+d;e=+e;f=+f;g=+g;h=+h;i=+i;j=+j;k=+k;l=+l;m=m|0;var n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0;o=f;n=g;while(1){v=o-d;u=n-e;t=h-o;s=i-n;r=j-h;f=k-i;q=j-d;g=k-e;f=+C(+(v*v+u*u))+ +C(+(t*t+s*s))+ +C(+(r*r+f*f));g=+C(+(q*q+g*g));if((m|0)>16)break;if(!(f*f-g*g>l)){p=5;break}y=(d+o)*.5;x=(e+n)*.5;s=(o+h)*.5;t=(n+i)*.5;u=(h+j)*.5;v=(i+k)*.5;f=(y+s)*.5;g=(x+t)*.5;s=(s+u)*.5;t=(t+v)*.5;q=(f+s)*.5;r=(g+t)*.5;w=m+1|0;Sx(a,b,d,e,y,x,f,g,q,r,l,w);d=q;e=r;o=s;n=t;h=u;i=v;m=w}if((p|0)==5){Qx(a,c[b>>2]|0,j,k);c[b>>2]=(c[b>>2]|0)+1}return}function Tx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(!(c[a+56>>2]|0)){b=Vx(a,b)|0;if((b|0)>=0){if(d|0)c[d>>2]=(hx((c[a+4>>2]|0)+b+2|0)|0)<<16>>16;if(e|0)c[e>>2]=(hx((c[a+4>>2]|0)+b+4|0)|0)<<16>>16;if(f|0)c[f>>2]=(hx((c[a+4>>2]|0)+b+6|0)|0)<<16>>16;if(!g)b=1;else{c[g>>2]=(hx((c[a+4>>2]|0)+b+8|0)|0)<<16>>16;b=1}}else b=0}else{Ux(a,b,d,e,f,g);b=1}return b|0}function Ux(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=l;l=l+48|0;j=k;h=j+4|0;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=1;a=Yx(a,b,j)|0;if(d|0){i=(a|0)!=0;c[d>>2]=i?c[j+24>>2]|0:0;c[e>>2]=i?c[j+32>>2]|0:0;c[f>>2]=i?c[j+28>>2]|0:0;c[g>>2]=i?c[j+36>>2]|0:0}l=k;return}function Vx(a,b){a=a|0;b=b|0;var d=0,e=0;if(c[a+56>>2]|0)Cb(16740,16307,1439,16756);if((c[a+12>>2]|0)>(b|0)?(d=c[a+44>>2]|0,(d|0)<=1):0){e=c[a+24>>2]|0;a=(c[a+4>>2]|0)+(c[a+16>>2]|0)|0;if(!d){b=a+(b<<1)|0;a=((Wx(b)|0)&65535)<<1;b=((Wx(b+2|0)|0)&65535)<<1}else{b=a+(b<<2)|0;a=Xx(b)|0;b=Xx(b+4|0)|0}a=a+e|0;a=(a|0)==(b+e|0)?-1:a}else a=-1;return a|0}function Wx(a){a=a|0;return ((d[a>>0]|0)<<8|(d[a+1>>0]|0))&65535|0}function Xx(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,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.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;Q=l;l=l+352|0;v=Q+336|0;L=Q+144|0;M=Q+24|0;N=Q+12|0;O=Q;P=a+84|0;c[N>>2]=c[P>>2];c[N+4>>2]=c[P+4>>2];c[N+8>>2]=c[P+8>>2];P=a+60|0;c[v>>2]=c[P>>2];c[v+4>>2]=c[P+4>>2];c[v+8>>2]=c[P+8>>2];Zx(O,v,b);P=O+4|0;w=O+8|0;a:do if((c[P>>2]|0)<(c[w>>2]|0)){x=a+116|0;y=a+72|0;z=L+4|0;A=L+8|0;C=L+12|0;D=L+16|0;E=L+20|0;F=L+24|0;G=L+28|0;H=L+32|0;I=L+36|0;J=L+40|0;K=L+44|0;t=1;e=0;r=0;u=0;s=0;b:while(1){j=_x(O)|0;c:do switch(j<<24>>24){case 14:break b;case 20:case 19:{if(t)e=e+((s|0)/2|0)|0;$x(O,(e+7|0)/8|0);k=0;i=r;j=u;f=0;q=70;break}case 23:case 18:case 3:case 1:{k=t;e=e+((s|0)/2|0)|0;i=r;j=u;f=0;q=70;break}case 21:{if((s|0)<2){e=0;break a}ay(d,+g[L+(s+-2<<2)>>2],+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 4:{if((s|0)<1){e=0;break a}ay(d,0.0,+g[L+(s+-1<<2)>>2]);k=0;i=r;j=u;f=0;q=70;break}case 22:{if((s|0)<1){e=0;break a}ay(d,+g[L+(s+-1<<2)>>2],0.0);k=0;i=r;j=u;f=0;q=70;break}case 5:{if((s|0)<2){e=0;break a}else{f=0;i=1}do{by(d,+g[L+(f<<2)>>2],+g[L+(i<<2)>>2]);f=f+2|0;i=f|1}while((i|0)<(s|0));k=t;i=r;j=u;f=0;q=70;break}case 7:{if((s|0)<1){e=0;break a}else{f=0;q=20}break}case 6:{if((s|0)<1){e=0;break a}else{f=0;q=18}break}case 31:{if((s|0)<4){e=0;break a}else{j=0;q=28}break}case 30:{if((s|0)<4){e=0;break a}else{f=0;q=24}break}case 8:{if((s|0)<6){e=0;break a}else{f=0;i=5}while(1){cy(d,+g[L+(f<<2)>>2],+g[L+((f|1)<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(f+3<<2)>>2],+g[L+(f+4<<2)>>2],+g[L+(i<<2)>>2]);i=f+11|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else f=f+6|0}break}case 24:{if((s|0)<8){e=0;break a}f=s+-2|0;j=0;i=5;do{cy(d,+g[L+(j<<2)>>2],+g[L+((j|1)<<2)>>2],+g[L+(j+2<<2)>>2],+g[L+(j+3<<2)>>2],+g[L+(j+4<<2)>>2],+g[L+(i<<2)>>2]);q=j;j=j+6|0;i=q+11|0}while((i|0)<(f|0));f=j|1;if((f|0)>=(s|0)){e=0;break a}by(d,+g[L+(j<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 25:{if((s|0)<8){e=0;break a}f=s+-6|0;i=0;j=1;while(1){by(d,+g[L+(i<<2)>>2],+g[L+(j<<2)>>2]);k=i+2|0;j=k|1;if((j|0)>=(f|0))break;else i=k}f=i+7|0;if((f|0)>=(s|0)){e=0;break a}cy(d,+g[L+(k<<2)>>2],+g[L+(j<<2)>>2],+g[L+(i+4<<2)>>2],+g[L+(i+5<<2)>>2],+g[L+(i+6<<2)>>2],+g[L+(f<<2)>>2]);k=t;i=r;j=u;f=0;q=70;break}case 27:case 26:{if((s|0)<4){e=0;break a}i=s&1;f=(i|0)==0;i=i+3|0;if((i|0)<(s|0)){j=j<<24>>24==27;p=f?0.0:+g[L>>2];f=(f^1)&1;while(1){m=+g[L+(f<<2)>>2];n=+g[L+(f+1<<2)>>2];o=+g[L+(f+2<<2)>>2];h=+g[L+(i<<2)>>2];if(j)cy(d,m,p,n,o,h,0.0);else cy(d,p,m,n,o,0.0,h);i=f+7|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;break}else{p=0.0;f=f+4|0}}}else{k=t;i=r;j=u;f=0;q=70}break}case 10:{if(!r)if(!(c[x>>2]|0)){i=1;q=54}else{dy(N,a,b);i=1;q=54}else{i=r;q=54}break}case 29:{i=r;q=54;break}case 11:{if((u|0)<1){e=0;break a}j=u+-1|0;k=M+(j*12|0)|0;c[O>>2]=c[k>>2];c[O+4>>2]=c[k+4>>2];c[O+8>>2]=c[k+8>>2];k=t;i=r;f=s;q=70;break}case 12:switch((_x(O)|0)<<24>>24){case 34:{if((s|0)<7){e=0;break a}o=+g[A>>2];m=+g[D>>2];n=+g[E>>2];p=+g[F>>2];cy(d,+g[L>>2],0.0,+g[z>>2],o,+g[C>>2],0.0);cy(d,m,0.0,n,-o,p,0.0);k=t;i=r;j=u;f=0;q=70;break c}case 35:{if((s|0)<13){e=0;break a}R=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];o=+g[J>>2];p=+g[K>>2];cy(d,+g[L>>2],+g[z>>2],+g[A>>2],+g[C>>2],+g[D>>2],+g[E>>2]);cy(d,R,h,m,n,o,p);k=t;i=r;j=u;f=0;q=70;break c}case 36:{if((s|0)<9){e=0;break a}o=+g[z>>2];p=+g[C>>2];h=+g[E>>2];m=+g[F>>2];R=+g[G>>2];n=+g[H>>2];cy(d,+g[L>>2],o,+g[A>>2],p,+g[D>>2],0.0);cy(d,h,0.0,m,R,n,-(o+p+R));k=t;i=r;j=u;f=0;q=70;break c}case 37:{if((s|0)<11){e=0;break a}Y=+g[L>>2];X=+g[z>>2];W=+g[A>>2];V=+g[C>>2];U=+g[D>>2];T=+g[E>>2];S=+g[F>>2];h=+g[G>>2];m=+g[H>>2];n=+g[I>>2];R=+g[J>>2];o=Y+W+U+S+m;p=X+V+T+h+n;k=+B(+o)>+B(+p);cy(d,Y,X,W,V,U,T);cy(d,S,h,m,n,k?R:-o,k?-p:R);k=t;i=r;j=u;f=0;q=70;break c}default:{e=0;break a}}case -1:{h=+((gy(O,4)|0)>>>0)*.0000152587890625;q=74;break}case 28:{q=73;break}default:if((j&255)<32|j<<24>>24==-1){e=0;break a}else q=73}while(0);if((q|0)==54){if((s|0)<1){e=0;break a}f=s+-1|0;if((u|0)>9){e=0;break a}s=~~+g[L+(f<<2)>>2];r=M+(u*12|0)|0;c[r>>2]=c[O>>2];c[r+4>>2]=c[O+4>>2];c[r+8>>2]=c[O+8>>2];r=j<<24>>24==10?N:y;c[v>>2]=c[r>>2];c[v+4>>2]=c[r+4>>2];c[v+8>>2]=c[r+8>>2];ey(O,v,s);if(!(c[w>>2]|0)){e=0;break a}c[P>>2]=0;k=t;j=u+1|0;q=70}else if((q|0)==73){$x(O,-1);h=+(((hy(O)|0)&65535)<<16>>16);q=74}if((q|0)==74){if((s|0)>47){e=0;break a}g[L+(s<<2)>>2]=h;k=t;i=r;j=u;f=s+1|0;q=70}while(1)if((q|0)==18){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,+g[L+(f<<2)>>2],0.0);f=f+1|0;q=20;continue}else if((q|0)==20){if((f|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}by(d,0.0,+g[L+(f<<2)>>2]);f=f+1|0;q=18;continue}else if((q|0)==24){i=f+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}j=f+4|0;if((s-f|0)==5)h=+g[L+(j<<2)>>2];else h=0.0;cy(d,0.0,+g[L+(f<<2)>>2],+g[L+(f+1<<2)>>2],+g[L+(f+2<<2)>>2],+g[L+(i<<2)>>2],h);q=28;continue}else if((q|0)==28){i=j+3|0;if((i|0)>=(s|0)){k=t;i=r;j=u;f=0;q=70;continue}f=j+4|0;if((s-j|0)==5)h=+g[L+(f<<2)>>2];else h=0.0;cy(d,+g[L+(j<<2)>>2],0.0,+g[L+(j+1<<2)>>2],+g[L+(j+2<<2)>>2],h,+g[L+(i<<2)>>2]);q=24;continue}else if((q|0)==70)if((c[P>>2]|0)<(c[w>>2]|0)){t=k;r=i;u=j;s=f;continue b}else{e=0;break a}}fy(d);e=1}else e=0;while(0);l=Q;return e|0}function Zx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;ny(b,0);d=gy(b,2)|0;e=_x(b)|0;f=e&255;if(!((c|0)>-1&(d|0)>(c|0)))Cb(16982,16307,1117,17002);if((e+-1&255)<4){$x(b,O(f,c)|0);e=gy(b,f)|0;qy(a,b,(O(d+1|0,f)|0)+2+e|0,(gy(b,f)|0)-e|0);return}else Cb(16899,16307,1118,17002)}function _x(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0)<(c[b+8>>2]|0)){b=c[b>>2]|0;c[d>>2]=e+1;b=a[b+e>>0]|0}else b=0;return b|0}function $x(a,b){a=a|0;b=b|0;ny(a,(c[a+4>>2]|0)+b|0);return}function ay(a,b,c){a=a|0;b=+b;c=+c;var d=0;fy(a);d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;g[a+8>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;g[a+12>>2]=c;iy(a,1,~~b,~~c,0,0,0,0);return}function by(a,b,c){a=a|0;b=+b;c=+c;var d=0;d=a+16|0;b=+g[d>>2]+b;g[d>>2]=b;d=a+20|0;c=+g[d>>2]+c;g[d>>2]=c;iy(a,2,~~b,~~c,0,0,0,0);return}function cy(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0,j=0;j=a+16|0;b=+g[j>>2]+b;i=a+20|0;c=+g[i>>2]+c;d=b+d;e=c+e;f=d+f;g[j>>2]=f;h=e+h;g[i>>2]=h;iy(a,4,~~f,~~h,~~b,~~c,~~d,~~e);return}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+64|0;k=p+48|0;j=p+36|0;i=p+12|0;m=p+24|0;n=p;h=b+108|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];ny(i,0);a:do switch((_x(i)|0)<<24>>24){case 0:{$x(i,d);e=(_x(i)|0)&255;break}case 3:{h=gy(i,2)|0;e=gy(i,2)|0;if((h|0)>0){f=0;while(1){g=_x(i)|0;q=e;e=gy(i,2)|0;f=f+1|0;if((q|0)<=(d|0)&(e|0)>(d|0))break;if((f|0)>=(h|0)){o=6;break a}}e=g&255}else o=6;break}default:o=6}while(0);if((o|0)==6){my(k,0,0);e=-1}q=b+48|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];q=b+96|0;c[k>>2]=c[q>>2];c[k+4>>2]=c[q+4>>2];c[k+8>>2]=c[q+8>>2];Zx(n,k,e);c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];oy(a,j,k);l=p;return}function ey(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+16|0;e=f;g=ly(b)|0;d=((g|0)>33899?32768:(g|0)>1239?1131:107)+d|0;if((d|0)>-1&(d|0)<(g|0)){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];Zx(a,e,d)}else my(a,0,0);l=f;return}function fy(a){a=a|0;var b=0.0,c=0.0;c=+g[a+8>>2];b=+g[a+12>>2];if(!(!(c!=+g[a+16>>2])?!(b!=+g[a+20>>2]):0))iy(a,2,~~c,~~b,0,0,0,0);return}function gy(a,b){a=a|0;b=b|0;var c=0,d=0;if((b+-1|0)>>>0<4){c=0;d=0}else Cb(16794,16307,1013,16811);do{c=c<<8|(_x(a)|0)&255;d=d+1|0}while((d|0)!=(b|0));return c|0}function hy(a){a=a|0;var b=0,c=0,d=0;c=_x(a)|0;d=c&255;a:do if((c+-32&255)<215)b=d+-139|0;else{if((c+9&255)<4){b=((d<<8)+-63232|(_x(a)|0)&255)+108|0;break}if((c&255)>250&c<<24>>24!=-1){b=(251-d<<8)+-108-((_x(a)|0)&255)|0;break}switch(c<<24>>24){case 28:{b=gy(a,2)|0;break a}case 29:{b=gy(a,4)|0;break a}default:Cb(16777,16307,1063,16779)}}while(0);return b|0}function iy(a,d,e,f,g,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;if(c[a>>2]|0){jy(a,e,f);if(d<<24>>24==4){jy(a,g,h);jy(a,i,j)}}else{l=a+40|0;k=a+44|0;ky((c[l>>2]|0)+((c[k>>2]|0)*14|0)|0,d,e,f,g,h);g=c[l>>2]|0;h=c[k>>2]|0;b[g+(h*14|0)+8>>1]=i;b[g+(h*14|0)+10>>1]=j}l=a+44|0;c[l>>2]=(c[l>>2]|0)+1;return}function jy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=a+28|0;if(!((c[e>>2]|0)>=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;e=a+36|0;if(!((c[e>>2]|0)>=(d|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=d;e=a+24|0;if(!((c[e>>2]|0)<=(b|0)?(c[a+4>>2]|0)!=0:0))c[e>>2]=b;b=a+32|0;e=a+4|0;if(!((c[b>>2]|0)<=(d|0)?(c[e>>2]|0)!=0:0))c[b>>2]=d;c[e>>2]=1;return}function ky(c,d,e,f,g,h){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;a[c+12>>0]=d;b[c>>1]=e;b[c+2>>1]=f;b[c+4>>1]=g;b[c+6>>1]=h;return}function ly(a){a=a|0;ny(a,0);return gy(a,2)|0}function my(a,b,d){a=a|0;b=b|0;d=d|0;if(d>>>0<1073741824){c[a>>2]=b;c[a+8>>2]=d;c[a+4>>2]=0;return}else Cb(16826,16307,1022,16844)}function ny(a,b){a=a|0;b=b|0;if((b|0)<0?1:(c[a+8>>2]|0)<(b|0))Cb(16859,16307,1e3,16883);else{c[a+4>>2]=b;return}}function oy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+32|0;f=h+20|0;i=h;g=h+8|0;c[f>>2]=0;e=i;c[e>>2]=0;c[e+4>>2]=0;py(d,18,2,i);e=c[i+4>>2]|0;d=c[i>>2]|0;do if(!((e|0)==0|(d|0)==0)){qy(g,b,e,d);py(g,19,1,f);d=c[f>>2]|0;if(!d){my(a,0,0);break}else{ny(b,e+d|0);ry(a,b);break}}else my(a,0,0);while(0);l=h;return}function py(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;sy(g,a,b);b=g+4|0;a:do if((d|0)>0){f=g+8|0;a=0;do{if((c[b>>2]|0)>=(c[f>>2]|0))break a;c[e+(a<<2)>>2]=hy(g)|0;a=a+1|0}while((a|0)<(d|0))}while(0);l=h;return}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;my(a,0,0);if((e|d|0)>=0?(f=c[b+8>>2]|0,!((f|0)<(d|0)|(f-d|0)<(e|0))):0){c[a>>2]=(c[b>>2]|0)+d;c[a+8>>2]=e}return}function ry(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+4|0;e=c[d>>2]|0;f=gy(b,2)|0;do if(f|0){h=_x(b)|0;g=h&255;if((h+-1&255)<4){$x(b,O(f,g)|0);$x(b,(gy(b,g)|0)+-1|0);break}else Cb(16899,16307,1048,16928)}while(0);qy(a,b,e,(c[d>>2]|0)-e|0);return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;ny(b,0);f=b+4|0;g=b+8|0;while(1){i=c[f>>2]|0;if((i|0)>=(c[g>>2]|0)){e=10;break}if(((ty(b)|0)&255)>27){do uy(b);while(((ty(b)|0)&255)>27);h=c[f>>2]|0}else h=i;e=_x(b)|0;if(e<<24>>24==12)e=(_x(b)|0)&255|256;else e=e&255;if((e|0)==(d|0)){e=9;break}}if((e|0)==9)qy(a,b,i,h-i|0);else if((e|0)==10)qy(a,b,0,0);return}function ty(b){b=b|0;var d=0;d=c[b+4>>2]|0;if((d|0)<(c[b+8>>2]|0))b=a[(c[b>>2]|0)+d>>0]|0;else b=0;return b|0}function uy(a){a=a|0;var b=0,d=0,e=0;b=ty(a)|0;if((b&255)<=27)Cb(16949,16307,1069,16958);a:do if(b<<24>>24==30){$x(a,1);b=a+4|0;d=a+8|0;do{if((c[b>>2]|0)>=(c[d>>2]|0))break a;e=(_x(a)|0)&255}while(!((e&15|0)==15|(e&240|0)==240))}else hy(a)|0;while(0);return}function vy(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.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.0,O=0.0;M=l;l=l+16|0;B=M;h=c[e+4>>2]|0;f=Vx(e,f)|0;c[g>>2]=0;a:do if((f|0)<0)f=0;else{f=h+f|0;h=hx(f)|0;b:do if(h<<16>>16>0){K=f+10|0;I=h<<16>>16<<1;h=K+I|0;i=Wx(h)|0;J=(Wx(h+-2|0)|0)&65535;L=Bf(((I|1)+J|0)*14|0)|0;if(!L){f=0;break a}m=J+1|0;f=0;j=0;k=0;h=h+2+(i&65535)|0;do{if(!(j<<24>>24)){i=h+1|0;f=a[h>>0]|0;if(!(f&8)){j=0;h=i}else{j=a[i>>0]|0;h=h+2|0}}else j=j+-1<<24>>24;a[L+((k+I|0)*14|0)+12>>0]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&2)){if(!(i&16)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&16|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;k=0;do{j=k+I|0;i=d[L+(j*14|0)+12>>0]|0;if(!(i&4)){if(!(i&32)){f=((d[h>>0]<<8|d[h+1>>0])<<16>>16)+f|0;h=h+2|0}}else{H=d[h>>0]|0;f=(i&32|0?H:0-H|0)+f|0;h=h+1|0}b[L+(j*14|0)+2>>1]=f;k=k+1|0}while((k|0)!=(m|0));f=0;H=0;z=0;A=0;k=0;w=0;t=0;E=0;F=0;m=0;h=0;G=0;while(1){i=G+I|0;j=a[L+(i*14|0)+12>>0]|0;e=b[L+(i*14|0)>>1]|0;x=b[L+(i*14|0)+2>>1]|0;do if((z|0)!=(G|0)){h=(h|0)!=0;y=f+1|0;i=L+(f*14|0)|0;if(!(j&1)){if(!h){D=H;B=1;j=A;i=G;break}ky(i,3,F+e>>1,E+x>>1,F,E);D=H;B=1;j=A;f=y;i=G;break}if(h){ky(i,3,e,x,F,E);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}else{ky(i,2,e,x,0,0);D=H;x=E;e=F;B=0;j=A;f=y;i=G;break}}else{if(!G)y=f;else y=xy(L,f,h,m,t,w,k,A,F,E)|0;D=j&1;m=(D^1)&255;do if(!(D<<24>>24)){f=i+1|0;h=b[L+(f*14|0)>>1]|0;if(!(a[L+(f*14|0)+12>>0]&1)){j=x;k=e;f=(b[L+(f*14|0)+2>>1]|0)+x>>1;h=h+e>>1;i=G;break}else{j=x;k=e;f=b[L+(f*14|0)+2>>1]|0;i=G+1|0;break}}else{j=A;f=x;h=e;i=G}while(0);ky(L+(y*14|0)|0,1,h,f,0,0);D=H+1|0;z=((Wx(K+(H<<1)|0)|0)&65535)+1|0;x=E;e=F;B=0;w=f;t=h;f=y+1|0}while(0);if((i|0)<(J|0)){H=D;A=j;E=x;F=e;h=B;G=i+1|0}else break}h=L;f=xy(L,f,B,m,t,w,k,j,e,x)|0}else{if(h<<16>>16!=-1){if(h<<16>>16>=0){h=0;f=0;break}Cb(16777,16307,1723,17096)}h=0;m=f+10|0;f=0;x=0;y=0;k=0;while(1){c[B>>2]=0;z=hx(m)|0;t=hx(m+2|0)|0;i=m+4|0;z=z&65535;if(!(z&2)){D=42;break}if(!(z&1)){j=6;u=+(a[i>>0]|0);v=+(a[m+5>>0]|0)}else{u=+((hx(i)|0)<<16>>16);j=8;v=+((hx(m+6|0)|0)<<16>>16)}i=m+j|0;do if(!(z&8)){if(z&64|0){q=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+4|0;r=0.0;s=0.0;n=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;break}if(!(z&128)){w=i;q=1.0;r=0.0;s=0.0;n=1.0}else{q=+((hx(i)|0)<<16>>16)*.00006103515625;r=+((hx(i+2|0)|0)<<16>>16)*.00006103515625;s=+((hx(i+4|0)|0)<<16>>16)*.00006103515625;w=i+8|0;n=+((hx(i+6|0)|0)<<16>>16)*.00006103515625}}else{n=+((hx(i)|0)<<16>>16)*.00006103515625;w=i+2|0;q=n;r=0.0;s=0.0}while(0);o=+C(+(r*r+q*q));p=+C(+(n*n+s*s));j=Bx(e,t&65535,B)|0;if((j|0)>0){A=c[B>>2]|0;i=0;do{L=A+(i*14|0)|0;K=A+(i*14|0)+2|0;N=+(b[L>>1]|0);O=+(b[K>>1]|0);b[L>>1]=~~(o*(u+(q*N+s*O)));b[K>>1]=~~(p*(v+(r*N+n*O)));K=A+(i*14|0)+4|0;L=A+(i*14|0)+6|0;O=+(b[K>>1]|0);N=+(b[L>>1]|0);b[K>>1]=~~(o*(u+(q*O+s*N)));b[L>>1]=~~(p*(v+(r*O+n*N)));i=i+1|0}while((i|0)!=(j|0));i=j+f|0;m=Bf(i*14|0)|0;if(!m)break;if((f|0)>0)Zaa(m|0,y|0,f*14|0)|0;Zaa(m+(f*14|0)|0,A|0,j*14|0)|0;if(h|0)_f(k);_f(A);h=m;f=i;j=m;k=m;i=m}else{j=x;i=y}if(!(z&32))break b;else{m=w;x=j;y=i}}if((D|0)==42)Cb(16777,16307,1670,17096);if(h|0)_f(x);_f(A);f=0;break a}while(0);c[g>>2]=h}while(0);l=M;return f|0}function wy(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;k=l;l=l+96|0;e=k+48|0;f=k;g=e+4|0;h=g+44|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[e>>2]=1;g=f;h=g+48|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));if((Yx(a,b,e)|0)!=0?(j=e+44|0,h=Bf((c[j>>2]|0)*14|0)|0,c[d>>2]=h,c[f+40>>2]=h,(Yx(a,b,f)|0)!=0):0){a=c[f+44>>2]|0;if((a|0)==(c[j>>2]|0))i=a;else Cb(17023,16307,2113,17073)}else{c[d>>2]=0;i=0}l=k;return i|0}function xy(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,l=0;k=(c|0)!=0;c=b+1|0;l=a+(b*14|0)|0;do if(!d)if(k){ky(l,3,e,f,i,j);break}else{ky(l,2,e,f,0,0);break}else{if(k)ky(l,3,i+g>>1,j+h>>1,i,j);else c=b;ky(a+(c*14|0)|0,3,e,f,g,h);c=c+1|0}while(0);return c|0}function yy(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a+6>>1]|0;e=b[c+6>>1]|0;if((d&65535)<=(e&65535))if((d&65535)<(e&65535))a=1;else{e=b[a+4>>1]|0;a=b[c+4>>1]|0;a=(e&65535)>(a&65535)?-1:(e&65535)<(a&65535)&1}else a=-1;return a|0}function zy(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;By(a,d,f,g);i=a+8|0;h=c[i>>2]|0;if(((h|0)!=0?(j=(c[a+4>>2]|0)+g|0,(j|0)<=(c[d+4>>2]|0)):0)?(l=d+28|0,k=c[l>>2]|0,(k|0)!=0):0){g=c[a>>2]|0;b[k>>1]=g;b[k+2>>1]=j;i=k+4|0;c[l>>2]=c[i>>2];a=c[h>>2]|0;if((g|0)>(e[a>>1]|0|0)){h=a+4|0;a=c[h>>2]|0}c[h>>2]=k;h=a+4|0;d=c[h>>2]|0;g=g+f|0;a:do if(d)while(1){if((g|0)<(e[d>>1]|0|0))break a;c[h>>2]=c[l>>2];c[l>>2]=a;h=d+4|0;a=c[h>>2]|0;if(!a){a=d;break}else{f=d;d=a;a=f}}while(0);c[i>>2]=a;if((g|0)>(e[a>>1]|0|0))b[a>>1]=g}else c[i>>2]=0;return}function Ay(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;b=c[b+12>>2]|0;return ((a|0)<(b|0)?-1:(a|0)>(b|0)&1)|0}function By(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,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=l;l=l+16|0;t=x;r=c[d+8>>2]|0;s=f+-1+r|0;s=s-((s|0)%(r|0)|0)|0;if((s|0)%(r|0)|0|0)Cb(17196,17218,344,17240);r=d+24|0;f=c[r>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)<=(c[d>>2]|0)){o=d+16|0;p=d+4|0;n=r;i=1073741824;h=1073741824;m=0;while(1){k=Cy(f,j&65535,s,t)|0;do if(c[o>>2]|0)if((k+g|0)>(c[p>>2]|0))k=m;else{if((k|0)>=(i|0)){j=c[t>>2]|0;if((k|0)==(i|0)&(j|0)<(h|0))h=j;else{k=m;break}}else h=c[t>>2]|0;i=k;k=n}else{q=(k|0)<(i|0);i=q?k:i;k=q?n:m}while(0);n=f+4|0;f=c[n>>2]|0;j=b[f>>1]|0;if((s+(j&65535)|0)>(c[d>>2]|0))break;else m=k}if(!k){m=0;j=0}else{m=k;j=e[c[k>>2]>>1]|0}}else{h=1073741824;i=1073741824;m=0;j=0}a:do if((c[d+16>>2]|0)==1){k=c[r>>2]|0;if((s|0)>(e[k>>1]|0|0)){f=k;do f=c[f+4>>2]|0;while((s|0)>(e[f>>1]|0|0))}else f=k;if(f){q=d+4|0;d=j;j=r;while(1){n=(e[f>>1]|0)-s|0;if((n|0)>-1){o=k;p=j}else{f=21;break}while(1){j=o+4|0;k=c[j>>2]|0;if((n|0)<(e[k>>1]|0|0))break;else{o=k;p=j}}if((n|0)<(e[o>>1]|0|0)){f=24;break}k=Cy(o,n,s,t)|0;do if((k|0)>(i|0)?1:(k+g|0)>=(c[q>>2]|0))j=d;else{j=c[t>>2]|0;if(!((k|0)<(i|0)|(j|0)<(h|0))){if(!((n|0)<(d|0)&(j|0)==(h|0))){j=d;break}}else h=j;j=n;m=p;i=k}while(0);f=c[f+4>>2]|0;if(!f){u=j;v=m;w=i;break a}else{d=j;k=o;j=p}}if((f|0)==21)Cb(17269,17218,401,17240);else if((f|0)==24)Cb(17279,17218,407,17240)}else{u=j;v=m;w=i}}else{u=j;v=m;w=i}while(0);c[a+8>>2]=v;c[a>>2]=u;c[a+4>>2]=w;l=x;return}function Cy(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;o=f+d|0;j=e[a>>1]|0;if((j|0)>(d|0))Cb(17319,17218,287,17334);if((e[c[a+4>>2]>>1]|0|0)<=(d|0))Cb(17360,17218,294,17334);if((o|0)>(j|0)){i=0;n=0;h=0;while(1){m=e[a+2>>1]|0;do if((h|0)<(m|0)){i=(O(m-h|0,n)|0)+i|0;a=c[a+4>>2]|0;l=b[a>>1]|0;k=l&65535;if((j|0)<(d|0)){h=m;k=k-d|0;j=l;break}else{h=m;k=k-j|0;j=l;break}}else{a=c[a+4>>2]|0;l=b[a>>1]|0;k=(l&65535)-j|0;k=(k+n|0)>(f|0)?f-n|0:k;i=(O(k,h-m|0)|0)+i|0;j=l}while(0);j=j&65535;if((o|0)<=(j|0))break;else n=k+n|0}}else{i=0;h=0}c[g>>2]=i;return h|0}function Dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;x=l;l=l+96|0;q=x+76|0;g=x+64|0;r=x+52|0;j=x+40|0;k=x+36|0;m=x+32|0;n=x+16|0;p=x+12|0;o=x+20|0;h=x;c[a+4>>2]=b;c[a+8>>2]=d;my(q,0,0);i=a+48|0;c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];v=Ey(b,d,17379)|0;e=Ey(b,d,17384)|0;c[a+16>>2]=e;A=Ey(b,d,17389)|0;w=a+20|0;c[w>>2]=A;f=Ey(b,d,17394)|0;c[a+24>>2]=f;z=Ey(b,d,17399)|0;c[a+28>>2]=z;y=Ey(b,d,17404)|0;c[a+32>>2]=y;c[a+36>>2]=Ey(b,d,17409)|0;a:do if(!((v|0)==0|(A|0)==0|(z|0)==0|(y|0)==0)){b:do if(f){if(!e){e=0;break a}}else{c[k>>2]=2;c[m>>2]=0;c[n>>2]=0;c[p>>2]=0;e=Ey(b,d,17414)|0;do if(e|0?(my(q,0,0),s=a+96|0,c[s>>2]=c[q>>2],c[s+4>>2]=c[q+4>>2],c[s+8>>2]=c[q+8>>2],my(q,0,0),t=a+108|0,c[t>>2]=c[q>>2],c[t+4>>2]=c[q+4>>2],c[t+8>>2]=c[q+8>>2],my(q,b+e|0,536870912),c[i>>2]=c[q>>2],c[i+4>>2]=c[q+4>>2],c[i+8>>2]=c[q+8>>2],c[r>>2]=c[i>>2],c[r+4>>2]=c[i+4>>2],c[r+8>>2]=c[i+8>>2],$x(r,2),ny(r,(_x(r)|0)&255),ry(q,r),ry(o,r),c[q>>2]=c[o>>2],c[q+4>>2]=c[o+4>>2],c[q+8>>2]=c[o+8>>2],Zx(j,q,0),ry(q,r),ry(q,r),u=a+72|0,c[u>>2]=c[q>>2],c[u+4>>2]=c[q+4>>2],c[u+8>>2]=c[q+8>>2],py(j,17,1,m),py(j,262,1,k),py(j,292,1,n),py(j,293,1,p),c[g>>2]=c[r>>2],c[g+4>>2]=c[r+4>>2],c[g+8>>2]=c[r+8>>2],c[q>>2]=c[j>>2],c[q+4>>2]=c[j+4>>2],c[q+8>>2]=c[j+8>>2],oy(h,g,q),u=a+84|0,c[u>>2]=c[h>>2],c[u+4>>2]=c[h+4>>2],c[u+8>>2]=c[h+8>>2],u=c[m>>2]|0,!((c[k>>2]|0)!=2|(u|0)==0)):0){f=c[n>>2]|0;if(f|0){e=c[p>>2]|0;if(!e)break;ny(r,f);ry(q,r);c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];qy(q,r,e,(c[r+8>>2]|0)-e|0);c[t>>2]=c[q>>2];c[t+4>>2]=c[q+4>>2];c[t+8>>2]=c[q+8>>2]}ny(r,u);ry(q,r);A=a+60|0;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];c[A+8>>2]=c[q+8>>2];break b}while(0);e=0;break a}while(0);e=Ey(b,d,17419)|0;if(!e)e=65535;else e=(Wx(b+e+4|0)|0)&65535;c[a+12>>2]=e;A=Wx(b+v+2|0)|0;h=A&65535;i=a+40|0;c[i>>2]=0;if(A<<16>>16){j=v+4|0;g=0;e=0;do{f=b+(j+(g<<3))|0;c:do switch((Wx(f)|0)<<16>>16){case 3:{switch((Wx(f+2|0)|0)<<16>>16){case 10:case 1:break;default:break c}e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}case 0:{e=(Xx(f+4|0)|0)+v|0;c[i>>2]=e;break}default:{}}while(0);g=g+1|0}while((g|0)!=(h|0));if(e){c[a+44>>2]=(Wx(b+(c[w>>2]|0)+50|0)|0)&65535;e=1}else e=0}else e=0}else e=0;while(0);l=x;return e|0}function Ey(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=Wx(b+c+4|0)|0;k=i&65535;j=c+12|0;a:do if(!(i<<16>>16))c=0;else{g=a[e>>0]|0;h=e+1|0;i=e+2|0;e=e+3|0;c=0;while(1){f=b+(j+(c<<4))|0;if((((d[f>>0]|0)==(g|0)?(d[f+1>>0]|0)==(a[h>>0]|0):0)?(d[f+2>>0]|0)==(a[i>>0]|0):0)?(d[f+3>>0]|0)==(a[e>>0]|0):0)break;c=c+1|0;if((c|0)>=(k|0)){c=0;break a}}c=Xx(f+8|0)|0}while(0);return c|0}function Fy(b,c){b=b|0;c=c|0;var d=0;a:do if(!(Gy(b)|0))if((((a[b>>0]|0)==116?(a[b+1>>0]|0)==116:0)?(a[b+2>>0]|0)==99:0)?(a[b+3>>0]|0)==102:0){d=Xx(b+4|0)|0;if((d|0)<131072)switch(d|0){case 65536:break;default:{b=-1;break a}}else switch(d|0){case 131072:break;default:{b=-1;break a}}if((Hy(b+8|0)|0)>(c|0))b=Xx(b+12+(c<<2)|0)|0;else b=-1}else b=-1;else b=((c|0)!=0)<<31>>31;while(0);return b|0}function Gy(b){b=b|0;var c=0;a:do switch(a[b>>0]|0){case 49:{if(((a[b+1>>0]|0)==0?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}case 116:{if(((a[b+1>>0]|0)==121?(a[b+2>>0]|0)==112:0)?(a[b+3>>0]|0)==49:0){b=1;break a}if(((a[b+1>>0]|0)==114?(a[b+2>>0]|0)==117:0)?(a[b+3>>0]|0)==101:0)b=1;else c=17;break}case 79:{if(((a[b+1>>0]|0)==84?(a[b+2>>0]|0)==84:0)?(a[b+3>>0]|0)==79:0)b=1;else c=17;break}case 0:{if(((a[b+1>>0]|0)==1?(a[b+2>>0]|0)==0:0)?(a[b+3>>0]|0)==0:0)b=1;else c=17;break}default:c=17}while(0);if((c|0)==17)b=0;return b|0}function Hy(a){a=a|0;return (d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0)|0}function Iy(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jy(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ny(a,My(a,b)|0);c[a>>2]=b;return}function Ky(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<4)|0;else Cb(12740,37262,1030,12749);return 0}function Ly(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function My(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ny(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<4)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<4|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Oy(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;if(!((d|0)<65536&(e|0)<65536))Cb(17621,17218,250,17657);h=g+-1|0;if((g|0)>1){i=0;do{j=i;i=i+1|0;c[f+(j<<3)+4>>2]=f+(i<<3)}while((i|0)!=(h|0))}else h=0;c[f+(h<<3)+4>>2]=0;c[a+12>>2]=1;c[a+16>>2]=0;c[a+28>>2]=f;j=a+32|0;c[a+24>>2]=j;c[a>>2]=d;c[a+4>>2]=e;c[a+20>>2]=g;Py(a);b[j>>1]=0;b[a+34>>1]=0;j=a+40|0;c[a+36>>2]=j;b[j>>1]=d;b[a+42>>1]=-1;c[a+44>>2]=0;return}function Py(a){a=a|0;var b=0;b=c[a+20>>2]|0;c[a+8>>2]=((c[a>>2]|0)+-1+b|0)/(b|0)|0;return}function Qy(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+32|0;g=h;if(d>>>0<=65535)Cb(17675,12849,1572,17689);if((e+-1|0)>>>0>=65535)Cb(17710,12849,1573,17689);if((f+-1|0)>>>0<65535){Ry(g);c[g>>2]=d;b[g+4>>1]=e;b[g+6>>1]=f;f=a+48|0;Sy(f,g);l=h;return (c[f>>2]|0)+-1|0}else Cb(17739,12849,1574,17689);return 0}function Ry(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+16|0;bf(e);c[a>>2]=-1;b[a+6>>1]=0;b[a+4>>1]=0;b[a+10>>1]=-1;b[a+8>>1]=-1;g[a+12>>2]=0.0;df(h,0.0,0.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;c[a+24>>2]=0;l=d;return}function Sy(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Uy(a,Ty(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function Ty(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Uy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Vy(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;g=(((c8(b)|0)+4|0)/5|0)<<2;f=Bf(g)|0;Wy(b,f);e=Xy(a,f,g,c,d,e)|0;_f(f);return e|0}function Wy(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;d=a[b>>0]|0;if(d<<24>>24)while(1){e=jz(d)|0;f=jz(a[b+1>>0]|0)|0;g=jz(a[b+2>>0]|0)|0;h=jz(a[b+3>>0]|0)|0;e=((((((((jz(a[b+4>>0]|0)|0)*85|0)+h|0)*85|0)+g|0)*85|0)+f|0)*85|0)+e|0;a[c>>0]=e;a[c+1>>0]=e>>>8;a[c+2>>0]=e>>>16;a[c+3>>0]=e>>>24;b=b+5|0;d=a[b>>0]|0;if(!(d<<24>>24))break;else c=c+4|0}return}function Xy(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;n=l;l=l+112|0;j=n;k=Yy(d)|0;m=Bf(k)|0;Zy(m,d,e);if(!g)mw(j);else{i=j;d=g;e=i+100|0;do{c[i>>2]=c[d>>2];i=i+4|0;d=d+4|0}while((i|0)<(e|0))}if(!(c[j>>2]|0)){a[j+8>>0]=1;m=_y(b,m,k,f,j,h)|0;l=n;return m|0}else Cb(29773,12849,1555,29797);return 0}function Yy(a){a=a|0;return (d[a+9>>0]|0)<<16|(d[a+8>>0]|0)<<24|(d[a+10>>0]|0)<<8|(d[a+11>>0]|0)|0}function Zy(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;do if((d[e+1>>0]<<16|d[e>>0]<<24|d[e+3>>0]|d[e+2>>0]<<8|0)==1471938560?(d[e+5>>0]<<16|d[e+4>>0]<<24|d[e+7>>0]|d[e+6>>0]<<8|0)==0:0){g=Yy(e)|0;c[14480]=e;c[14481]=e+f;g=b+g|0;c[14482]=g;c[14483]=b;c[14484]=b;f=e+16|0;while(1){b=gz(f)|0;if((b|0)==(f|0))break;if((c[14484]|0)>>>0>g>>>0){h=11;break}else f=b}if((h|0)==11)Cb(29997,12849,2800,29982);if((a[f>>0]|0)==5?(a[f+1>>0]|0)==-6:0){if((c[14484]|0)==(g|0))break;Cb(29955,12849,2790,29982)}Cb(16777,12849,2796,29982)}while(0);return}function _y(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+112|0;j=m;if(!f)mw(j);else{k=j;i=k+100|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(i|0))}if(c[j>>2]|0)Cb(29773,12849,1539,29828);c[j>>2]=b;c[j+4>>2]=d;g[j+16>>2]=e;if(h|0)c[j+48>>2]=h;k=$y(a,j)|0;l=m;return k|0}function $y(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j+5|0;f=j;h=j+4|0;if(c[d>>2]|0?(c[d+4>>2]|0)>0:0){if(!(+g[d+16>>2]>0.0))Cb(29912,12849,1458,29904);i=b+36|0;if(a[d+52>>0]|0){if(Tl(i)|0)Cb(29940,12849,1464,29904)}else{k=Bf(84)|0;a[e>>0]=a[h>>0]|0;h=Lg(84,e,k)|0;az(h);c[f>>2]=h;Ql(i,f)}f=b+60|0;bz(f,d);f=cz(f)|0;h=f+96|0;if(!(c[h>>2]|0))c[h>>2]=c[(Ul(i)|0)>>2];e=f+8|0;if(!(a[e>>0]|0)){k=f+4|0;i=Bf(c[k>>2]|0)|0;c[f>>2]=i;a[e>>0]=1;Zaa(i|0,c[d>>2]|0,c[k>>2]|0)|0}vw(b);l=j;return c[h>>2]|0}Cb(29849,12849,1457,29904);return 0}function az(a){a=a|0;var d=0,e=0,f=0,h=0;d=l;l=l+16|0;h=d;e=a+8|0;bf(e);fz(a+16|0);ds(a+28|0);Vr(a+40|0);g[a+4>>2]=1.0;b[a+60>>1]=63;df(h,0.0,1.0);f=c[h+4>>2]|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;zw(a);l=d;return}function bz(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){ez(a,dz(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;e=e+(d*100|0)|0;d=b;a=e+100|0;do{c[e>>2]=c[d>>2];e=e+4|0;d=d+4|0}while((e|0)<(a|0));return}function cz(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*100|0)|0;else Cb(37253,37262,1040,13011);return 0}function dz(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ez(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*100|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*100|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function fz(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return} +function Re(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function Se(){return l|0}function Te(a){a=a|0;l=a}function Ue(a,b){a=a|0;b=b|0;l=a;m=b}function Ve(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function We(a){a=a|0;z=a}function Xe(){return z|0}function Ye(){nw(42648);return}function Ze(){_e(42724);return}function _e(d){d=d|0;var 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;o=l;l=l+16|0;h=o;jf(d+4|0);af(d+5092|0);m=d+5940|0;Gu(m);vr(d+6088|0);vr(d+6100|0);vr(d+6112|0);Hg(d+6124|0);n=d+6188|0;bf(n);wr(d+6208|0);xr(d+6220|0);yr(d+6232|0);zr(d+6244|0);zr(d+6256|0);i=d+6268|0;bf(i);bf(d+6276|0);j=d+6284|0;bf(j);bf(d+6292|0);k=d+6320|0;Eg(k);Ar(d+6352|0);e=d+6408|0;f=d+6372|0;do{Br(f);f=f+12|0}while((f|0)!=(e|0));Mg(d+6412|0,0);e=d+6896|0;f=d+6532|0;do{Dr(f);f=f+52|0}while((f|0)!=(e|0));Er(d+6908|0);Eg(d+6940|0);Fr(d+6976|0);Gr(d+6996|0);az(d+10280|0);cf(d+10372|0);q=d+10392|0;bf(q);p=d+10412|0;bf(p);Hr(d+10424|0);f=d+10436|0;bf(f);e=d+10444|0;bf(e);Ir(d+10456|0);Jr(d+10468|0);a[d>>0]=0;c[d+5928>>2]=0;g[d+5936>>2]=0.0;g[d+5932>>2]=0.0;g[d+6072>>2]=0.0;c[d+6076>>2]=0;c[d+6084>>2]=-1;c[d+6080>>2]=-1;s=d+6136|0;t=d+6164|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;a[s+24>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;b[t+20>>1]=0;a[t+22>>0]=0;df(h,-1.0,-1.0);t=h;s=c[t+4>>2]|0;r=n;c[r>>2]=c[t>>2];c[r+4>>2]=s;c[d+6196>>2]=0;c[d+6200>>2]=0;c[d+6204>>2]=0;df(h,0.0,0.0);r=h;n=c[r+4>>2]|0;c[i>>2]=c[r>>2];c[i+4>>2]=n;df(h,0.0,0.0);i=h;n=c[i+4>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=n;a[d+6300>>0]=0;j=d+6304|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;Eg(h);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];k=d+6336|0;c[d+6348>>2]=0;a[d+6896>>0]=0;c[d+6900>>2]=0;c[k>>2]=0;c[k+4>>2]=0;b[k+8>>1]=0;a[k+10>>0]=0;c[d+6904>>2]=-1;c[d+6956>>2]=0;c[d+6964>>2]=0;c[d+6968>>2]=0;c[d+6972>>2]=-1;k=d+6988|0;c[k>>2]=0;c[k+4>>2]=0;c[d+10364>>2]=0;c[d+10368>>2]=335872;g[d+10388>>2]=0.0;df(h,0.0,0.0);k=h;j=c[k+4>>2]|0;n=q;c[n>>2]=c[k>>2];c[n+4>>2]=j;g[d+10400>>2]=.009999999776482582;g[d+10404>>2]=.009999999776482582;g[d+10408>>2]=10.0;df(h,0.0,0.0);n=h;j=c[n+4>>2]|0;k=p;c[k>>2]=c[n>>2];c[k+4>>2]=j;c[d+10420>>2]=0;df(h,-1.0,-1.0);k=h;j=c[k>>2]|0;k=c[k+4>>2]|0;n=e;c[n>>2]=j;c[n+4>>2]=k;n=f;c[n>>2]=j;c[n+4>>2]=k;g[d+6408>>2]=0.0;c[d+6452>>2]=m;c[d+6456>>2]=10860;g[d+10452>>2]=0.0;a[d+10480>>0]=0;c[d+10484>>2]=0;c[d+10488>>2]=0;c[d+10492>>2]=0;$aa(d+6528|0,0,368)|0;c[d+10496>>2]=2;$aa(d+10500|0,0,488)|0;c[d+10996>>2]=-1;c[d+10992>>2]=-1;c[d+10988>>2]=-1;$aa(d+11e3|0,0,3073)|0;l=o;return}function $e(a){a=a|0;var b=0,c=0;Kr(a+10468|0);Lr(a+10456|0);Mr(a+10424|0);yw(a+10280|0);Nr(a+6996|0);Or(a+6976|0);Pr(a+6412|0);c=a+6372|0;b=a+6408|0;do{b=b+-12|0;Cr(b)}while((b|0)!=(c|0));Qr(a+6256|0);Qr(a+6244|0);Rr(a+6232|0);Sr(a+6220|0);Tr(a+6208|0);Pg(a+6124|0);Ur(a+6112|0);Ur(a+6100|0);Ur(a+6088|0);return}function af(b){b=b|0;var 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;s=l;l=l+16|0;d=s;j=b+4|0;bf(j);k=b+20|0;bf(k);m=b+28|0;bf(m);n=b+52|0;bf(n);o=b+68|0;bf(o);p=b+76|0;bf(p);q=b+84|0;bf(q);r=b+116|0;bf(r);e=b+124|0;bf(e);f=b+132|0;bf(f);h=b+836|0;i=b+148|0;do{cf(i);i=i+16|0}while((i|0)!=(h|0));g[b>>2]=1.0;df(d,8.0,8.0);t=d;i=c[t+4>>2]|0;h=j;c[h>>2]=c[t>>2];c[h+4>>2]=i;g[b+12>>2]=7.0;g[b+16>>2]=0.0;df(d,32.0,32.0);h=d;j=c[h+4>>2]|0;i=k;c[i>>2]=c[h>>2];c[i+4>>2]=j;df(d,0.0,.5);i=d;k=c[i+4>>2]|0;j=m;c[j>>2]=c[i>>2];c[j+4>>2]=k;g[b+36>>2]=0.0;g[b+40>>2]=1.0;g[b+44>>2]=0.0;g[b+48>>2]=1.0;df(d,4.0,3.0);j=d;m=c[j+4>>2]|0;k=n;c[k>>2]=c[j>>2];c[k+4>>2]=m;g[b+60>>2]=0.0;g[b+64>>2]=0.0;df(d,8.0,4.0);k=d;n=c[k+4>>2]|0;m=o;c[m>>2]=c[k>>2];c[m+4>>2]=n;df(d,4.0,4.0);m=d;o=c[m+4>>2]|0;n=p;c[n>>2]=c[m>>2];c[n+4>>2]=o;df(d,0.0,0.0);n=d;o=c[n+4>>2]|0;p=q;c[p>>2]=c[n>>2];c[p+4>>2]=o;g[b+92>>2]=21.0;g[b+96>>2]=6.0;g[b+100>>2]=16.0;g[b+104>>2]=9.0;g[b+108>>2]=10.0;g[b+112>>2]=0.0;df(d,.5,.5);p=d;q=c[p+4>>2]|0;c[r>>2]=c[p>>2];c[r+4>>2]=q;df(d,22.0,22.0);r=d;q=c[r+4>>2]|0;p=e;c[p>>2]=c[r>>2];c[p+4>>2]=q;df(d,4.0,4.0);p=d;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;a[b+140>>0]=1;a[b+141>>0]=1;g[b+144>>2]=1.25;Du(b);l=s;return}function bf(a){a=a|0;g[a+4>>2]=0.0;g[a>>2]=0.0;return}function cf(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function df(a,b,c){a=a|0;b=+b;c=+c;g[a>>2]=b;g[a+4>>2]=c;return}function ef(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0;d=l;l=l+16|0;f=d;e=d+8|0;h=a+4|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+12|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+20|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+36|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+44|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+52|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+60|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+68|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+76|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=a+84|0;gf(e,h,b);ff(f,e);i=f;j=c[i+4>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;h=a+92|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+96|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+100|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+104|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+108|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+112|0;g[h>>2]=+hf(+g[h>>2]*b);h=a+124|0;gf(e,h,b);ff(f,e);j=f;i=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=i;a=a+132|0;gf(e,a,b);ff(f,e);e=c[f+4>>2]|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;l=d;return}function ff(a,b){a=a|0;b=b|0;df(a,+(~~+g[b>>2]|0),+(~~+g[b+4>>2]|0));return}function gf(a,b,c){a=a|0;b=b|0;c=+c;df(a,+g[b>>2]*c,+g[b+4>>2]*c);return}function hf(a){a=+a;return +(+(~~a|0))}function jf(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;f=n;bf(b);h=b+140|0;bf(h);i=b+148|0;bf(i);j=b+156|0;bf(j);k=b+200|0;bf(k);bf(b+796|0);m=b+804|0;bf(m);e=b+852|0;d=b+812|0;do{bf(d);d=d+8|0}while((d|0)!=(e|0));d=b+972|0;e=b+932|0;do{bf(e);e=e+8|0}while((e|0)!=(d|0));$aa(b|0,0,5088)|0;df(f,-1.0,-1.0);o=f;e=c[o+4>>2]|0;d=b;c[d>>2]=c[o>>2];c[d+4>>2]=e;g[b+8>>2]=.01666666753590107;g[b+12>>2]=5.0;c[b+16>>2]=4782;c[b+20>>2]=4792;g[b+24>>2]=.30000001192092896;g[b+28>>2]=6.0;d=b+36|0;e=d+76|0;do{c[d>>2]=-1;d=d+4|0}while((d|0)<(e|0));g[b+112>>2]=.25;g[b+116>>2]=.05000000074505806;c[b+120>>2]=0;c[b+124>>2]=42648;g[b+128>>2]=1.0;c[b+136>>2]=0;a[b+132>>0]=0;df(f,1.0,1.0);e=f;d=c[e+4>>2]|0;o=h;c[o>>2]=c[e>>2];c[o+4>>2]=d;df(f,0.0,0.0);o=f;h=c[o>>2]|0;o=c[o+4>>2]|0;d=j;c[d>>2]=h;c[d+4>>2]=o;d=i;c[d>>2]=h;c[d+4>>2]=o;a[b+164>>0]=0;a[b+165>>0]=1;c[b+168>>2]=0;c[b+184>>2]=2;c[b+188>>2]=9;c[b+172>>2]=3;c[b+176>>2]=1;c[b+180>>2]=0;c[b+192>>2]=2;c[b+196>>2]=0;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);d=f;o=c[d+4>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=o;df(f,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);k=f;o=c[k+4>>2]|0;d=m;c[d>>2]=c[k>>2];c[d+4>>2]=o;g[b+32>>2]=6.0;d=0;do{g[b+912+(d<<2)>>2]=-1.0;g[b+892+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=5);d=0;do{g[b+3040+(d<<2)>>2]=-1.0;g[b+992+(d<<2)>>2]=-1.0;d=d+1|0}while((d|0)!=512);l=n;return}function kf(a){a=a|0;a=(c[244]|0)+10424|0;if(Ut(a)|0)a=0;else a=qo(a)|0;return a|0}function lf(b,d){b=b|0;d=d|0;var e=0;e=(c[244]|0)+10424|0;zi(e);b=c8(d)|0;pg(e,b+1|0);Zaa(qg(e,0)|0,d|0,b|0)|0;a[(qg(e,b)|0)>>0]=0;return}function mf(a,b){a=a|0;b=b|0;return}function nf(a,c){a=a|0;c=c|0;var d=0;d=of(a+738|0)|0;if((d|0)<16){b[a+738+(d<<1)>>1]=c;b[a+738+(d+1<<1)>>1]=0}return}function of(a){a=a|0;var c=0;if(!(b[a>>1]|0))a=0;else{c=a;a=0;do{c=c+2|0;a=a+1|0}while((b[c>>1]|0)!=0)}return a|0}function pf(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,m=0,n=0;n=l;l=l+16|0;m=n;j=d+(e<<1)+-2|0;a:do if(j>>>0>d>>>0){k=(g|0)==0;e=d;while(1){if(!(k|f>>>0>>0))break a;if(!(a[f>>0]|0))break a;f=f+(Hf(m,f,g)|0)|0;i=c[m>>2]|0;if(!i)break;if(i>>>0<65536){b[e>>1]=i;e=e+2|0}if(e>>>0>=j>>>0)break a}}else e=d;while(0);b[e>>1]=0;if(h|0)c[h>>2]=f;l=n;return e-d>>1|0}function qf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;m=k+16|0;i=k+8|0;j=k;rf(m,e,b);rf(i,d,b);h=+g[i>>2];e=i+4|0;f=+g[e>>2];f=+C(+(h*h+f*f));sf(i,1.0/f);h=+g[m>>2]*+g[i>>2]+ +g[m+4>>2]*+g[e>>2];do if(!(h<0.0))if(h>f){i=d;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j;break}else{gf(j,i,h);tf(a,b,j);break}else{i=b;j=c[i+4>>2]|0;m=a;c[m>>2]=c[i>>2];c[m+4>>2]=j}while(0);l=k;return}function rf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]-+g[c>>2],+g[b+4>>2]-+g[c+4>>2]);return}function sf(a,b){a=a|0;b=+b;g[a>>2]=+g[a>>2]*b;a=a+4|0;g[a>>2]=+g[a>>2]*b;return}function tf(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]+ +g[c>>2],+g[b+4>>2]+ +g[c+4>>2]);return}function uf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;j=+g[d>>2];l=+g[b>>2];k=+g[a+4>>2];m=+g[b+4>>2];i=+g[d+4>>2];f=+g[a>>2];h=+g[c>>2];e=+g[c+4>>2];b=(j-h)*(m-e)-(l-h)*(i-e)<0.0;if((j-l)*(k-m)-(i-m)*(f-l)<0.0^b)b=0;else b=b^(j-f)*(e-k)-(i-k)*(h-f)<0.0^1;return b|0}function vf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;i=l;l=l+32|0;s=i+16|0;t=i+8|0;r=i;rf(s,b,a);rf(t,c,a);rf(r,d,a);n=+g[s>>2];q=+g[t+4>>2];p=+g[t>>2];k=+g[s+4>>2];j=n*q-p*k;m=+g[r>>2];o=+g[r+4>>2];g[f>>2]=(q*m-p*o)/j;j=(o*n-m*k)/j;g[h>>2]=j;g[e>>2]=1.0-+g[f>>2]-j;l=i;return}function wf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0.0,h=0.0,i=0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;o=m+24|0;qf(i,b,d,f);qf(j,d,e,f);qf(k,e,b,f);rf(o,f,i);n=+xf(o);rf(o,f,j);h=+xf(o);rf(o,f,k);g=+yf(n,+yf(h,+xf(o)));do if(!(g==n))if(g==h){k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=k;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k;break}else{j=i;k=c[j+4>>2]|0;o=a;c[o>>2]=c[j>>2];c[o+4>>2]=k}while(0);l=m;return}function xf(a){a=a|0;var b=0.0,c=0.0;c=+g[a>>2];b=+g[a+4>>2];return +(c*c+b*b)}function yf(a,b){a=+a;b=+b;return +(a>0]=0}return}function Af(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=Bf(c)|0;Zaa(b|0,a|0,c|0)|0;return b|0}function Bf(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+784|0;c[d>>2]=(c[d>>2]|0)+1;return Cd[c[b+188>>2]&63](a)|0}function Cf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(b>>>0>>0)while(1){if((a[b>>0]|0)==d<<24>>24)break a;b=b+1|0;if(b>>>0>=c>>>0){b=0;break}}else b=0;while(0);return b|0}function Df(a,c){a=a|0;c=c|0;var d=0;while(1){if(a>>>0<=c>>>0)break;d=a+-2|0;if((b[d>>1]|0)==10)break;else a=d}return a|0}function Ef(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=l;l=l+16|0;h=g;c[h>>2]=f;f=u8(b,d,e,h)|0;e=(f|0)!=-1&(f|0)<(d|0)?f:d+-1|0;if(!b)e=f;else a[b+e>>0]=0;l=g;return e|0}function Ff(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;e=u8(b,c,d,e)|0;d=(e|0)!=-1&(e|0)<(c|0)?e:c+-1|0;if(!b)d=e;else a[b+d>>0]=0;return d|0}function Gf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;if(!(c[14201]|0)){i=0;do{g=0;h=i;do{h=0-(h&1)&-306674912^h>>>1;g=g+1|0}while((g|0)!=8);c[56800+(i<<2)>>2]=h;i=i+1|0}while((i|0)!=256)}g=~f;if((e|0)<=0){h=a[b>>0]|0;if(h<<24>>24){e=g;while(1){i=b;b=b+1|0;f=a[b>>0]|0;if(h<<24>>24==35&f<<24>>24==35){e=(a[i+2>>0]|0)==35?g:e;f=35}e=e>>>8^c[56800+((e&255^h&255)<<2)>>2];if(!(f<<24>>24)){g=e;break}else h=f}}}else{h=b;while(1){e=e+-1|0;g=c[56800+((g&255^d[h>>0])<<2)>>2]^g>>>8;if(!e)break;else h=h+1|0}}return ~g|0}function Hf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=d[e>>0]|0;a:do if(g&128){if((g&224|0)==192){c[b>>2]=65533;if(f|0?(f-e|0)<2:0){f=1;break}g=a[e>>0]|0;if((g&255)<194){f=2;break}f=d[e+1>>0]|0;if((f&192|0)!=128){f=2;break}c[b>>2]=f&63|(g&31)<<6;f=2;break}if((g&240|0)==224){c[b>>2]=65533;if(f|0?(f-e|0)<3:0){f=1;break}h=a[e>>0]|0;switch(h<<24>>24){case -32:{if((a[e+1>>0]&-32)<<24>>24==-96)k=14;else{f=3;break a}break}case -19:{f=a[e+1>>0]|0;if((f&255)>159){f=3;break a}break}default:k=14}if((k|0)==14)f=a[e+1>>0]|0;g=f&255;if((g&192|0)!=128){f=3;break}f=d[e+2>>0]|0;if((f&192|0)!=128){f=3;break}c[b>>2]=f&63|g<<6&4032|(h&15)<<12;f=3;break}if((g&248|0)!=240){c[b>>2]=0;f=0;break}c[b>>2]=65533;if(f|0?(f-e|0)<4:0){f=1;break}g=a[e>>0]|0;if((g&255)<=244){switch(g<<24>>24){case -16:{if(((a[e+1>>0]|0)+112&255)>47){f=4;break a}else k=25;break}case -12:{f=a[e+1>>0]|0;if((f&255)>143){f=4;break a}break}default:k=25}if((k|0)==25)f=a[e+1>>0]|0;f=f&255;if((((f&192|0)==128?(h=d[e+2>>0]|0,(h&192|0)==128):0)?(i=d[e+3>>0]|0,(i&192|0)==128):0)?(j=h<<6&4032|f<<12&258048|(g&7)<<18,(j&2095104|0)!=55296):0){c[b>>2]=j|i&63;f=4}else f=4}else f=4}else{c[b>>2]=g;f=1}while(0);return f|0}function If(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;g=i;h=(d|0)==0;f=0;while(1){if(!(h|b>>>0>>0))break;if(!(a[b>>0]|0))break;b=b+(Hf(g,b,d)|0)|0;e=c[g>>2]|0;if(!e)break;else f=f+(e>>>0<65536&1)|0}l=i;return f|0}function Jf(c,d,e,f){c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;d=c+d|0;i=d+-1|0;a:do if(i>>>0>c>>>0){j=(f|0)==0;h=d+-1|0;d=c;while(1){if(!(j|e>>>0>>0))break a;g=b[e>>1]|0;if(!(g<<16>>16))break a;if((g&65535)<128){a[d>>0]=g;d=d+1|0}else d=d+(Kf(d,h-d|0,g&65535)|0)|0;if(d>>>0>>0)e=e+2|0;else break}}else d=c;while(0);a[d>>0]=0;return d-c|0}function Kf(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(d>>>0<128){a[b>>0]=d;b=1}else{if(d>>>0<2048){if((c|0)<2){b=0;break}a[b>>0]=(d>>>6)+192;a[b+1>>0]=d&63|128;b=2;break}switch(d&-1024|0){case 56320:{b=0;break a}case 55296:{if((c|0)<4){b=0;break a}a[b>>0]=(d>>>18)+240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break a}default:{if((c|0)<3){b=0;break a}a[b>>0]=(d>>>12)+224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break a}}}while(0);return b|0}function Lf(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;f=(c|0)==0;a:do if(f|a>>>0>>0){d=0;do{e=b[a>>1]|0;if(!(e<<16>>16))break a;a=a+2|0;if((e&65535)<128)e=1;else e=Mf(e&65535)|0;d=e+d|0}while(f|a>>>0>>0)}else d=0;while(0);return d|0}function Mf(a){a=a|0;if(a>>>0>=128)if(a>>>0<2048)a=2;else{a=a&-1024;return ((a|0)==56320?0:(a|0)==55296?4:3)|0}else a=1;return a|0}function Nf(a,b){a=a|0;b=b|0;Of(a,+((b&255)>>>0)*.003921568859368563,+((b>>>8&255)>>>0)*.003921568859368563,+((b>>>16&255)>>>0)*.003921568859368563,+(b>>>24>>>0)*.003921568859368563);return}function Of(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;g[a>>2]=b;g[a+4>>2]=c;g[a+8>>2]=d;g[a+12>>2]=e;return}function Pf(a){a=a|0;var b=0;b=~~(+Qf(+g[a>>2])*255.0+.5);b=~~(+Qf(+g[a+4>>2])*255.0+.5)<<8|b;b=b|~~(+Qf(+g[a+8>>2])*255.0+.5)<<16;return b|~~(+Qf(+g[a+12>>2])*255.0+.5)<<24|0}function Qf(a){a=+a;return +(a<0.0?0.0:a>1.0?1.0:a)}function Rf(a,b){a=a|0;b=+b;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[244]|0;a=f+5240+(a<<4)|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];a=e+12|0;g[a>>2]=+g[a>>2]*(+g[f+5092>>2]*b);a=Pf(e)|0;l=d;return a|0}function Sf(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=c[244]|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];a=d+12|0;g[a>>2]=+g[e+5092>>2]*+g[a>>2];a=Pf(d)|0;l=b;return a|0}function Tf(a){a=a|0;return (c[244]|0)+5240+(a<<4)|0}function Uf(a){a=a|0;var b=0.0;b=+g[(c[244]|0)+5092>>2];return (!(b>=1.0)?~~(b*+(a>>>24|0))<<24|a&16777215:a)|0}function Vf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;k=l;l=l+16|0;i=k+8|0;h=k+4|0;j=k;g[i>>2]=a;g[h>>2]=b;g[j>>2]=c;if(b>2]}else c=0.0;if(b>a){Wf(i,h);c=-.3333333432674408-c;b=+g[h>>2];a=+g[i>>2]}n=+g[j>>2];m=a-(b>2]=+B(+(c+(b-n)/(m*6.0+9.999999682655225e-21)));g[e>>2]=m/(a+9.999999682655225e-21);g[f>>2]=a;l=k;return}function Wf(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function Xf(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;if(b==0.0){g[f>>2]=c;g[e>>2]=c;g[d>>2]=c}else{i=+i9(a,1.0)/.1666666716337204;k=~~i;i=i-+(k|0);a=(1.0-b)*c;j=(1.0-i*b)*c;b=(1.0-(1.0-i)*b)*c;switch(k|0){case 0:{h=a;i=b;a=c;break}case 1:{h=a;i=c;a=j;break}case 2:{h=b;i=c;break}case 3:{h=c;i=j;break}case 4:{h=c;i=a;a=b;break}default:{h=j;i=a;a=c}}g[d>>2]=a;g[e>>2]=i;g[f>>2]=h}return}function Yf(a,b){a=a|0;b=b|0;return w9(a,b)|0}function Zf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;if(!((a|0)!=0&(b|0)!=0))Cb(4806,4833,1364,4849);g=(d|0)!=0;if(g)c[d>>2]=0;b=Yf(a,b)|0;do if(!b)a=0;else{if(((G9(b,0,2)|0)==0?(f=N9(b)|0,(f|0)!=-1):0)?(G9(b,0,0)|0)==0:0){a=Bf(f+e|0)|0;if(!a){k9(b)|0;a=0;break}if((K9(a,1,f,b)|0)!=(f|0)){k9(b)|0;_f(a);a=0;break}if((e|0)>0)$aa(a+f|0,0,e|0)|0;k9(b)|0;if(!g)break;c[d>>2]=f;break}k9(b)|0;a=0}while(0);return a|0}function _f(a){a=a|0;var b=0,d=0;b=c[244]|0;if(a|0){d=b+784|0;c[d>>2]=(c[d>>2]|0)+-1}je[c[b+192>>2]&127](a);return}function $f(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=ag(a,b)|0;if((e|0)!=(bg(a)|0)?(c[e>>2]|0)==(b|0):0)d=c[e+4>>2]|0;return d|0}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=bs(a)|0;a=(dg(a)|0)-d>>3;if(a)do{g=a>>>1;e=d+(g<<3)|0;f=(c[e>>2]|0)>>>0>>0;a=f?a+-1-g|0:g;d=f?e+8|0:d}while((a|0)!=0);return d|0}function bg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function cg(a,b){a=a|0;b=b|0;var d=0;d=ag(a,b)|0;if((d|0)!=(bg(a)|0)?(c[d>>2]|0)==(b|0):0)a=c[d+4>>2]|0;else a=0;return a|0}function dg(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<3)|0}function eg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<3)|0)>>>0>=b>>>0):0){b=b-f>>3;if((e|0)==(c[a+4>>2]|0)){du(a,eu(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<3)|0;_aa(f+8|0,f|0,e-b<<3|0)|0}e=d;f=c[e+4>>2]|0;d=(c[g>>2]|0)+(b<<3)|0;c[d>>2]=c[e>>2];c[d+4>>2]=f;c[a>>2]=(c[a>>2]|0)+1;return (c[g>>2]|0)+(b<<3)|0}Cb(11501,37262,1065,11531);return 0}function fg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function gg(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function hg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{fg(e,b,d);eg(a,f,e)|0}l=g;return}function ig(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=ag(a,b)|0;if((f|0)!=(dg(a)|0)?(c[f>>2]|0)==(b|0):0)c[f+4>>2]=d;else{gg(e,b,d);eg(a,f,e)|0}l=g;return}function jg(a){a=a|0;Db(a|0)|0;saa()}function kg(a){a=+a;var b=0,c=0;b=Ii()|0;if(a==0.0)a=+g[b+484>>2];c=b+324|0;g[c>>2]=a;Il(b+344|0,c);return}function lg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;if(!(d&1048576)){df(g,0.0,0.0);g=oo(a,b,c,g,d,e,f)|0;l=h;return g|0}else Cb(8620,4833,8990,32225);return 0}function mg(){var a=0,b=0;b=Ii()|0;a=b+344|0;Ml(a);if(Nl(a)|0)a=b+484|0;else a=Ll(a)|0;c[b+324>>2]=c[a>>2];return}function ng(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;i=l;l=l+16|0;h=i;c[h>>2]=c[d>>2];e=Ff(0,0,b,d)|0;if((e|0)>=1){f=c[a>>2]|0;g=f+e|0;j=c[a+4>>2]|0;d=j<<1;if((g|0)>=(j|0))og(a,(g|0)>(d|0)?g:d);pg(a,g);Ff(qg(a,f+-1|0)|0,e+1|0,b,h)|0}l=i;return}function og(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;e=a+4|0;if((c[e>>2]|0)<(b|0)){f=Bf(b)|0;g=a+8|0;d=c[g>>2]|0;if(!d)a=0;else{Zaa(f|0,d|0,c[a>>2]|0)|0;a=c[g>>2]|0}_f(a);c[g>>2]=f;c[e>>2]=b}return}function pg(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))og(a,rs(a,b)|0);c[a>>2]=b;return}function qg(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+b|0;else Cb(12740,37262,1030,12749);return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;ng(a,b,f);l=e;return}function sg(a){a=a|0;var b=0;b=a+80|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function tg(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0;if((c[a>>2]|0)>=9)Cb(4868,4833,1705,4911);c[a>>2]=b;g[a+12>>2]=0.0;f=a+8|0;g[f>>2]=0.0;h=a+4|0;g[h>>2]=d;if(e){e=a+48|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[e+28>>2]=0}if((b|0)>0){b=0;do{e=a+48+(b<<2)|0;if((b|0)>0?+g[e>>2]>0.0:0)g[f>>2]=+g[h>>2]+ +g[f>>2];g[a+16+(b<<2)>>2]=+(~~+g[f>>2]|0);g[f>>2]=+g[e>>2]+ +g[f>>2];g[e>>2]=0.0;b=b+1|0}while((b|0)<(c[a>>2]|0))}return}function ug(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0,h=0,i=0;i=a+12|0;g[i>>2]=0.0;h=a+48|0;b=+vg(+g[h>>2],b);g[h>>2]=b;h=a+52|0;g[h>>2]=+vg(+g[h>>2],c);h=a+56|0;g[h>>2]=+vg(+g[h>>2],d);h=a+4|0;f=0;d=b;b=0.0;while(1){if((f|0)>0&d>0.0)c=+g[h>>2];else c=0.0;b=b+(d+c);g[i>>2]=b;e=f+1|0;if((e|0)==3)break;f=e;d=+g[a+48+(e<<2)>>2]}return +(+vg(+g[a+8>>2],b))}function vg(a,b){a=+a;b=+b;return +(a>=b?a:b)}function wg(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0;g[a>>2]=+xg();h=a+4|0;g[h>>2]=d;c[a+8>>2]=b;i=a+12|0;c[i>>2]=0;e=a+16|0;c[e>>2]=-1;f=a+20|0;c[f>>2]=-1;if(d>0.0){yg(b,d,e,f);b=c[e>>2]|0;if((b|0)>0){d=+g[h>>2];zg(+g[a>>2]+d*+(b|0),d)}c[i>>2]=2}return}function xg(){var a=0;a=Cg()|0;return +(+g[a+220>>2]-+g[a+24>>2]+ +g[a+108>>2])}function yg(b,d,e,f){b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0,j=0.0;i=c[244]|0;h=c[i+6140>>2]|0;do if(!(a[i+10480>>0]|0))if(!(a[h+144>>0]|0)){j=+g[h+220>>2];i=~~((+g[h+444>>2]-j)/d);h=kj(~~((+g[h+436>>2]-j)/d),0,b)|0;i=kj(i+1|0,h,b)|0;c[e>>2]=h;c[f>>2]=i;break}else{c[f>>2]=0;c[e>>2]=0;break}else{c[e>>2]=0;c[f>>2]=b}while(0);return}function zg(a,b){a=+a;b=+b;var d=0;Zm(a);d=Ii()|0;a=+g[d+220>>2];g[d+228>>2]=a-b;g[d+256>>2]=b-+g[(c[244]|0)+5164>>2];d=c[d+416>>2]|0;if(d|0)g[d+36>>2]=a;return}function Ag(a){a=a|0;var b=0,d=0,e=0.0;b=a+8|0;d=c[b>>2]|0;if((d|0)>=0){if((d|0)!=2147483647){e=+g[a+4>>2];zg(+g[a>>2]+e*+(d|0),e)}c[b>>2]=-1;c[a+12>>2]=3}return}function Bg(b){b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=b+8|0;a:do if((c[e>>2]|0)!=0?(a[(Cg()|0)+144>>0]|0)==0:0){h=b+12|0;switch(c[h>>2]|0){case 0:{c[b+16>>2]=0;c[b+20>>2]=1;g[b>>2]=+xg();c[h>>2]=1;d=1;break a}case 1:{if((c[e>>2]|0)==1){c[e>>2]=-1;d=0;break a}f=+xg()-+g[b>>2];if(f>0.0){wg(b,(c[e>>2]|0)+-1|0,f);d=b+16|0;c[d>>2]=(c[d>>2]|0)+1;d=b+20|0;c[d>>2]=(c[d>>2]|0)+1;c[h>>2]=3;d=1;break a}else Cb(4918,4833,1801,37441);break}case 2:{if((c[b+16>>2]|0)>-1?(c[b+20>>2]|0)>-1:0){c[h>>2]=3;d=1;break a}Cb(4938,4833,1810,37441);break}case 3:{Ag(b);d=0;break a}default:{d=0;break a}}}else i=3;while(0);if((i|0)==3){c[e>>2]=-1;d=0}return d|0}function Cg(){return c[(c[244]|0)+6140>>2]|0}function Dg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;h=l;l=l+16|0;i=h;s=d+12|0;bf(s);x=d+20|0;bf(x);k=d+28|0;bf(k);v=d+36|0;bf(v);bf(d+44|0);t=d+52|0;bf(t);u=d+60|0;bf(u);Eg(d+68|0);q=d+84|0;bf(q);r=d+104|0;bf(r);o=d+112|0;bf(o);p=d+120|0;bf(p);j=d+132|0;bf(j);m=d+200|0;bf(m);n=d+208|0;bf(n);Fg(d+216|0);y=d+420|0;Gg(y);Eg(d+432|0);Eg(d+448|0);Eg(d+464|0);sg(d+488|0);Hg(d+568|0);Ig(d+580|0);c[d>>2]=Af(f)|0;w=d+4|0;c[w>>2]=Gf(f,0,0)|0;Jg(y,w);c[d+8>>2]=0;df(i,0.0,0.0);f=i;w=c[f>>2]|0;f=c[f+4>>2]|0;c[x>>2]=w;c[x+4>>2]=f;c[s>>2]=w;c[s+4>>2]=f;df(i,0.0,0.0);s=i;f=c[s>>2]|0;s=c[s+4>>2]|0;c[v>>2]=f;c[v+4>>2]=s;c[k>>2]=f;c[k+4>>2]=s;df(i,0.0,0.0);k=i;s=c[k>>2]|0;k=c[k+4>>2]|0;f=u;c[f>>2]=s;c[f+4>>2]=k;f=t;c[f>>2]=s;c[f+4>>2]=k;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[q>>2]=c[f>>2];c[q+4>>2]=k;g[d+92>>2]=0.0;g[d+96>>2]=0.0;c[d+100>>2]=Kg(d,4975,0)|0;df(i,0.0,0.0);q=i;k=c[q+4>>2]|0;f=r;c[f>>2]=c[q>>2];c[f+4>>2]=k;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=i;k=c[f+4>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=k;df(i,.5,.5);o=i;k=c[o+4>>2]|0;f=p;c[f>>2]=c[o>>2];c[f+4>>2]=k;a[d+129>>0]=0;a[d+128>>0]=0;df(i,0.0,0.0);f=i;k=c[f+4>>2]|0;c[j>>2]=c[f>>2];c[j+4>>2]=k;j=d+140|0;c[j>>2]=0;b[j+4>>1]=0;a[j+6>>0]=0;c[d+148>>2]=-1;c[d+152>>2]=-1;c[d+156>>2]=0;c[d+160>>2]=0;c[d+168>>2]=-1;c[d+164>>2]=-1;a[d+172>>0]=0;c[d+176>>2]=0;c[d+180>>2]=-1;c[d+184>>2]=0;c[d+196>>2]=15;c[d+192>>2]=15;c[d+188>>2]=15;df(i,3402823466385288598117041.0e14,3402823466385288598117041.0e14);j=i;k=c[j>>2]|0;j=c[j+4>>2]|0;f=n;c[f>>2]=k;c[f+4>>2]=j;f=m;c[f>>2]=k;c[f+4>>2]=j;c[d+480>>2]=-1;g[d+484>>2]=0.0;g[d+592>>2]=1.0;f=Bf(116)|0;a[i>>0]=a[h+8>>0]|0;f=Lg(116,i,f)|0;Mg(f,e+5940|0);c[d+596>>2]=f;c[f+44>>2]=c[d>>2];c[d+600>>2]=0;c[d+604>>2]=0;c[d+608>>2]=0;c[d+616>>2]=-1;c[d+612>>2]=-1;c[d+624>>2]=2147483647;c[d+620>>2]=2147483647;c[d+632>>2]=2147483647;c[d+628>>2]=2147483647;l=h;return}function Eg(a){a=a|0;df(a,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(a+8|0,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14);return}function Fg(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+16|0;f=e;bf(b);h=b+8|0;bf(h);k=b+16|0;bf(k);m=b+24|0;bf(m);d=b+60|0;Eg(d);vr(b+84|0);cs(b+116|0);ds(b+128|0);ds(b+140|0);es(b+152|0);df(f,0.0,0.0);i=f;j=c[i>>2]|0;i=c[i+4>>2]|0;c[m>>2]=j;c[m+4>>2]=i;c[k>>2]=j;c[k+4>>2]=i;c[h>>2]=j;c[h+4>>2]=i;h=b;c[h>>2]=j;c[h+4>>2]=i;h=b+32|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[b+48>>2]=-1.0;c[b+52>>2]=0;c[b+56>>2]=0;Eg(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];a[b+76>>0]=0;a[b+77>>0]=0;g[b+80>>2]=0.0;c[b+96>>2]=0;c[b+100>>2]=0;g[b+108>>2]=0.0;c[b+104>>2]=1;g[b+112>>2]=-1.0;b=b+164|0;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));l=e;return}function Gg(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Hg(a){a=a|0;is(a);return}function Ig(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jg(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){fu(a,gu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Kg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;d=Gf(b,(d|0)==0?0:d-b|0,a)|0;Wg(d);return d|0}function Lg(a,b,c){a=a|0;b=b|0;c=c|0;return c|0}function Mg(a,b){a=a|0;b=b|0;js(a);Vr(a+12|0);ks(a+24|0);ls(a+60|0);ms(a+72|0);ns(a+84|0);os(a+104|0);c[a+40>>2]=b;c[a+44>>2]=0;Hu(a);return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;return}function Og(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pg(a){a=a|0;ps(a);return}function Qg(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rg(a){a=a|0;fs(a+152|0);gs(a+140|0);gs(a+128|0);hs(a+116|0);Ur(a+84|0);return}function Sg(a){a=a|0;Tg(a+596|0);Ug(a);Og(a+580|0);Pg(a+568|0);Qg(a+420|0);Rg(a+216|0);return}function Tg(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Pr(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ug(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){_f(b);c[a>>2]=0}return}function Vg(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Wg(b){b=b|0;var d=0;d=c[244]|0;if((c[d+6172>>2]|0)==(b|0))a[d+6184>>0]=1;return}function Xg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=Gf(e,4,c[(Vg(a+420|0)|0)>>2]|0)|0;Wg(b);l=d;return b|0}function Yg(a,b,d){a=a|0;b=b|0;d=d|0;a=c[(Vg(a+420|0)|0)>>2]|0;return Gf(b,(d|0)==0?0:d-b|0,a)|0}function Zg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0;d=l;l=l+16|0;f=d;e=c[(Vg(a+420|0)|0)>>2]|0;i=+g[a+20>>2];c[f>>2]=~~(+g[b>>2]-i);h=+g[a+24>>2];c[f+4>>2]=~~(+g[b+4>>2]-h);c[f+8>>2]=~~(+g[b+8>>2]-i);c[f+12>>2]=~~(+g[b+12>>2]-h);b=Gf(f,16,e)|0;Wg(b);l=d;return b|0}function _g(b,e){b=b|0;e=e|0;var f=0,h=0,i=0;f=c[244]|0;h=f+6172|0;i=(c[h>>2]|0)!=(b|0);a[f+6185>>0]=i&1;if(i)g[f+6180>>2]=0.0;c[h>>2]=b;a[f+6186>>0]=0;i=f+6184|0;a[i>>0]=d[i>>0]|0|(b|0)!=0;c[f+6196>>2]=e;return}function $g(){_g(0,0);return}function ah(b){b=b|0;var d=0.0,e=0;e=c[244]|0;c[e+6156>>2]=b;a[e+6160>>0]=0;if((b|0)!=0?(c[e+6164>>2]|0)==(b|0):0)d=+g[e+6168>>2]+ +g[e+12>>2];else d=0.0;g[e+6168>>2]=d;return}function bh(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+16|0;e=i;f=c[244]|0;h=c[f+6140>>2]|0;if((a[h+144>>0]|0)==0?(q=h+216|0,k=h+248|0,n=+vg(+g[k>>2],+g[b+4>>2]),m=h+252|0,d=+vg(+g[m>>2],d),p=h+220|0,df(e,+g[q>>2]+ +g[b>>2],+g[p>>2]),o=h+224|0,s=e,r=c[s+4>>2]|0,b=o,c[b>>2]=c[s>>2],c[b+4>>2]=r,b=f+5164|0,df(e,+(~~(+g[h+20>>2]+ +g[h+404>>2]+ +g[h+412>>2])|0),+(~~(n+ +g[p>>2]+ +g[b>>2])|0)),p=e,e=c[p+4>>2]|0,f=q,c[f>>2]=c[p>>2],c[f+4>>2]=e,f=h+240|0,g[f>>2]=+vg(+g[f>>2],+g[o>>2]),f=h+244|0,g[f>>2]=+vg(+g[f>>2],(c[j>>2]=e,+g[j>>2])-+g[b>>2]),g[h+256>>2]=n,g[h+260>>2]=d,g[m>>2]=0.0,g[k>>2]=0.0,(c[h+316>>2]|0)==1):0)ch(0.0,-1.0);l=i;return}function ch(b,d){b=+b;d=+d;var e=0.0,f=0,h=0,i=0;i=Ii()|0;if(!(a[i+144>>0]|0)){f=c[244]|0;h=d<0.0;if(b!=0.0){e=+g[i+412>>2];b=+g[i+408>>2]+((h?0.0:d)+(+g[i+20>>2]-+g[i+104>>2]+b))}else{if(h)e=+g[f+5160>>2];else e=d;b=+g[i+224>>2]}g[i+216>>2]=e+b;c[i+220>>2]=c[i+228>>2];c[i+248>>2]=c[i+256>>2];c[i+252>>2]=c[i+260>>2]}return}function dh(a,b){a=a|0;b=+b;var c=0,d=0;c=l;l=l+16|0;d=c;eh(d,a);bh(d,b);l=c;return}function eh(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2]-+g[b>>2],+g[b+12>>2]-+g[b+4>>2]);return}function fh(b,d){b=b|0;d=d|0;var e=0,f=0;f=c[(c[244]|0)+6140>>2]|0;e=gh(b,d,0)|0;c[f+272>>2]=d;d=f+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];d=f+292|0;a[d>>0]=0;if(e)d=0;else{a[d>>0]=(hh(b,b+8|0,1)|0)&1;d=1}return d|0}function gh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[244]|0;do if(!(lh(b,(c[f+6140>>2]|0)+432|0)|0)){if(d|0?(c[f+6172>>2]|0)==(d|0):0){g=6;break}if(!e?(a[f+10480>>0]|0)!=0:0)g=6;else b=1}else g=6;while(0);if((g|0)==6)b=0;return b|0}function hh(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;k=l;l=l+48|0;e=k+32|0;f=k+16|0;g=k+8|0;h=k;i=c[244]|0;j=c[i+6140>>2]|0;lj(e,a,b);if(d)mj(e,j+432|0);j=i+5176|0;rf(g,e,j);tf(h,e+8|0,j);lj(f,g,h);j=nj(f,i+204|0)|0;l=k;return j|0}function ih(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=c[d+6140>>2]|0;do if(a[f+292>>0]|0){if(b&3|0)Cb(4981,4833,2039,33306);if(!((b&32|0)==0?(c[d+6152>>2]|0)!=(c[f+604>>2]|0):0)){if(((((b&16|0)==0?(e=c[d+6172>>2]|0,e|0):0)?(e|0)!=(c[f+272>>2]|0):0)?(a[d+6186>>0]|0)==0:0)?(e|0)!=(c[f+100>>2]|0):0){b=0;break}if(jh(f,b)|0?(c[f+320>>2]&4|0)==0:0){if((c[f+272>>2]|0)==(c[f+100>>2]|0)?a[f+142>>0]|0:0){b=0;break}b=1}else b=0}else b=0}else b=0;while(0);return b|0}function jh(b,d){b=b|0;d=d|0;var e=0;e=c[(c[244]|0)+6144>>2]|0;do if(!e)e=1;else{e=c[e+604>>2]|0;if((e|0?a[e+141>>0]|0:0)?(e|0)!=(c[b+604>>2]|0):0){e=c[e+8>>2]|0;if(e&134217728|0){e=0;break}if((d&4|0)==0&(e&67108864|0)!=0){e=0;break}}e=1}while(0);return e|0}function kh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[244]|0;e=c[f+6156>>2]|0;if(!((e|0)==0|(e|0)==(d|0))?(a[f+6160>>0]|0)==0:0)e=0;else g=3;do if((g|0)==3){e=c[f+6140>>2]|0;if((c[f+6148>>2]|0)==(e|0)){g=c[f+6172>>2]|0;if(!((g|0)==0|(g|0)==(d|0))?(a[f+6186>>0]|0)==0:0){e=0;break}if((hh(b,b+8|0,1)|0?jh(e,0)|0:0)?(c[e+320>>2]&4|0)==0:0){ah(d);e=1}else e=0}else e=0}while(0);return e|0}function lh(a,b){a=a|0;b=b|0;if((+g[b+4>>2]<+g[a+12>>2]?+g[b+12>>2]>+g[a+4>>2]:0)?+g[b>>2]<+g[a+8>>2]:0)a=+g[b+8>>2]>+g[a>>2];else a=0;return a|0}function mh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;g=c[244]|0;h=(c[b+320>>2]&5|0)==1;i=b+612|0;c[i>>2]=(c[i>>2]|0)+1;if(h){j=b+616|0;c[j>>2]=(c[j>>2]|0)+1}if(((((e?(c[g+6172>>2]|0)==(d|0):0)?(c[b+628>>2]|0)==2147483647:0)?(f=b+632|0,(c[f>>2]|0)==2147483647):0)?(a[g+225>>0]|0)==0:0)?nh(0,1)|0:0)c[f>>2]=((a[g+226>>0]|0)==0?1:h<<31>>31)+(c[b+616>>2]|0);do if((c[i>>2]|0)==(c[b+620>>2]|0))b=1;else{if(h?(c[b+616>>2]|0)==(c[b+624>>2]|0):0){b=1;break}b=0}while(0);return b|0}function nh(a,b){a=a|0;b=b|0;a=c[(c[244]|0)+40+(a<<2)>>2]|0;if((a|0)>-1)a=uj(a,b)|0;else a=0;return a|0}function oh(a){a=a|0;var b=0;b=a+612|0;c[b>>2]=(c[b>>2]|0)+-1;a=a+616|0;c[a>>2]=(c[a>>2]|0)+-1;return}function ph(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0,i=0.0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;j=m+8|0;f=m;h=m+16|0;k=c[244]|0;bf(j);i=+g[b>>2];if(!(!(i<0.0)?!(+g[b+4>>2]<0.0):0)){n=(c[k+6140>>2]|0)+20|0;qh(h);tf(f,n,h);n=f;f=c[n+4>>2]|0;h=j;c[h>>2]=c[n>>2];c[h+4>>2]=f}if(i<=0.0){if(!(i==0.0))d=i+ +vg(+g[j>>2]-+g[(c[k+6140>>2]|0)+216>>2],4.0);g[b>>2]=d}f=b+4|0;d=+g[f>>2];if(d<=0.0){if(!(d==0.0))e=d+ +vg(+g[j+4>>2]-+g[(c[k+6140>>2]|0)+220>>2],4.0);g[f>>2]=e}k=b;b=c[k+4>>2]|0;n=a;c[n>>2]=c[k>>2];c[n+4>>2]=b;l=m;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0;b=Cg()|0;f=b+76|0;e=c[f+4>>2]|0;d=a;c[d>>2]=c[f>>2];c[d+4>>2]=e;d=c[b+416>>2]|0;if(d|0){h=+Hm((c[d+12>>2]|0)+1|0);g[a>>2]=h-+g[b+84>>2]}return}function rh(a,b){a=a|0;b=+b;var c=0,d=0,e=0;e=l;l=l+16|0;c=e;if(b<0.0)b=0.0;else{d=Cg()|0;if(!(b==0.0)){if(b>0.0)b=+g[d+20>>2]-+g[d+104>>2]+b}else{qh(c);b=+g[c>>2]+ +g[d+20>>2]}b=+vg(b-+g[a>>2],1.0)}l=e;return +b}function sh(){var a=0,b=0;a=c[244]|0;b=c[a+176>>2]|0;if(!b)a=58608;else a=Cd[b&63](c[a+184>>2]|0)|0;return a|0}function th(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+180>>2]|0;if(d|0)oe[d&127](c[b+184>>2]|0,a);return}function uh(){return 30079}function vh(){return c[244]|0}function wh(a){a=a|0;c[244]=a;return}function xh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+1|0;f=(b|0)==0?2:b;b=Cd[f&63](14076)|0;a[g>>0]=a[e>>0]|0;_e(Lg(14076,g,b)|0);c[b+188>>2]=f;c[b+192>>2]=d|0?d:9;l=e;return b|0}function yh(a){a=a|0;var b=0;b=c[a+192>>2]|0;$e(a);je[b&127](a);if((c[244]|0)==(a|0))wh(0);return}function zh(){return (c[244]|0)+4|0}function Ah(){return (c[244]|0)+5092|0}function Bh(){var b=0;b=(c[244]|0)+6352|0;return (a[b>>0]|0?b:0)|0}function Ch(){return +(+g[(c[244]|0)+6072>>2])}function Dh(){return c[(c[244]|0)+6076>>2]|0}function Eh(){return (c[244]|0)+6412|0}function Fh(){return (c[244]|0)+5940|0}function Gh(){var b=0,e=0,f=0,h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;B=l;l=l+48|0;A=B+8|0;q=B;w=B+40|0;x=B+32|0;y=B+24|0;z=c[244]|0;t=z+12|0;if(!(+g[t>>2]>=0.0))Cb(5060,4833,2266,30213);f=z+4|0;if(+g[f>>2]>=0.0?(e=z+8|0,+g[e>>2]>=0.0):0){i=z+128|0;b=(c[i>>2]|0)+36|0;if((c[b>>2]|0)<=0)Cb(5256,4833,2268,30213);if(!(Ih(c[(Hh(b,0)|0)>>2]|0)|0))Cb(5377,4833,2269,30213);b=z+5236|0;if(!(+g[b>>2]>0.0))Cb(5504,4833,2270,30213);h=+g[z+5092>>2];if(!(h>=0.0)|!(h<=1.0))Cb(5567,4833,2271,30213);k=z+6076|0;v=c[k>>2]|0;if(v|0?(c[z+6080>>2]|0)!=(v|0):0)Cb(5723,4833,2272,30213);if(!(a[z>>0]|0))Jh();Kh(Lh()|0);if(!(Ih(c[z+5928>>2]|0)|0))Cb(5857,4833,2279,30213);Of(A,0.0,0.0,+g[f>>2],+g[e>>2]);p=z+5960|0;c[p>>2]=c[A>>2];c[p+4>>2]=c[A+4>>2];c[p+8>>2]=c[A+8>>2];c[p+12>>2]=c[A+12>>2];c[z+5956>>2]=c[b>>2];p=z+6072|0;g[p>>2]=+g[t>>2]+ +g[p>>2];c[k>>2]=(c[k>>2]|0)+1;c[z+10420>>2]=0;c[z+6136>>2]=0;v=z+6412|0;Hu(v);lv(v,c[i>>2]|0);iv(v);c[z+6448>>2]=(a[z+5233>>0]|0?2:0)|d[z+5232>>0];a[z+6352>>0]=0;v=z+6356|0;b=z+6164|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;if(!(c[b>>2]|0))g[z+6168>>2]=0.0;f=z+6156|0;c[b>>2]=c[f>>2];c[f>>2]=0;a[z+6160>>0]=0;f=z+6184|0;if(!(a[f>>0]|0)){b=z+6172|0;e=c[b>>2]|0;if((e|0)==0?1:(c[z+6176>>2]|0)!=(e|0))v=b;else{$g();r=27}}else{b=z+6172|0;r=27}if((r|0)==27){v=b;e=c[b>>2]|0}if(e|0){u=z+6180|0;g[u>>2]=+g[t>>2]+ +g[u>>2]}c[z+6176>>2]=e;a[f>>0]=0;a[z+6185>>0]=0;b=z+10364|0;u=c[b>>2]|0;if(!((u|0)==0|(e|0)==(u|0)))c[b>>2]=0;u=z+6896|0;if(a[u>>0]|0?((c[z+6924>>2]|0)+1|0)<(c[k>>2]|0):0){Mh();Nh(z+6976|0);s=z+6988|0;c[s>>2]=0;c[s+4>>2]=0}b=z+6964|0;c[z+6968>>2]=c[b>>2];c[b>>2]=0;g[z+6960>>2]=3402823466385288598117041.0e14;Zaa(z+3044|0,z+996|0,2048)|0;b=0;do{e=z+996+(b<<2)|0;if(a[z+229+b>>0]|0){h=+g[e>>2];if(h<0.0)h=0.0;else h=h+ +g[t>>2]}else h=-1.0;g[e>>2]=h;b=b+1|0}while((b|0)!=512);s=z+204|0;b=z+808|0;if(Oh(s)|0?Oh(b)|0:0){rf(A,s,b);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}else{df(A,0.0,0.0);m=A;n=c[m+4>>2]|0;o=z+800|0;c[o>>2]=c[m>>2];c[o+4>>2]=n}o=s;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;m=A+4|0;n=z+28|0;o=z+32|0;k=0;do{f=z+212+k|0;if(!(a[f>>0]|0)){i=z+876+k|0;a[i>>0]=0;b=z+896+(k<<2)|0;e=b;b=+g[b>>2]>=0.0}else{e=z+896+(k<<2)|0;i=z+876+k|0;a[i>>0]=+g[e>>2]<0.0&1;b=0}a[z+886+k>>0]=b&1;b=c[e>>2]|0;c[z+916+(k<<2)>>2]=b;h=(c[j>>2]=b,+g[j>>2]);do if(!(a[f>>0]|0))h=-1.0;else{if(h<0.0){h=0.0;break}h=+g[t>>2]+h}while(0);g[e>>2]=h;e=z+881+k|0;a[e>>0]=0;do if(!(a[i>>0]|0)){if(!(a[f>>0]|0))break;rf(A,s,z+816+(k<<3)|0);i=z+936+(k<<3)|0;h=+g[A>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+936+(k<<3)+4|0;h=+g[m>>2];g[i>>2]=+vg(+g[i>>2],h<0.0?-h:h);i=z+976+(k<<2)|0;h=+g[i>>2];g[i>>2]=+vg(h,+xf(A))}else{h=+g[p>>2];f=z+856+(k<<2)|0;do if(h-+g[f>>2]<+g[n>>2]){b=z+816+(k<<3)|0;rf(A,s,b);C=+xf(A);h=+g[o>>2];if(!(C>0]=1;h=-3402823466385288598117041.0e14}else b=z+816+(k<<3)|0;while(0);g[f>>2]=h;i=s;f=c[i+4>>2]|0;e=b;c[e>>2]=c[i>>2];c[e+4>>2]=f;df(A,0.0,0.0);e=A;f=c[e+4>>2]|0;i=z+936+(k<<3)|0;c[i>>2]=c[e>>2];c[i+4>>2]=f;g[z+976+(k<<2)>>2]=0.0}while(0);k=k+1|0}while((k|0)!=5);C=+g[t>>2];b=z+10980|0;p=z+10500+(c[b>>2]<<2)|0;e=z+10984|0;g[e>>2]=+g[e>>2]+(C-+g[p>>2]);g[p>>2]=C;c[b>>2]=((c[b>>2]|0)+1|0)%120|0;g[z+780>>2]=1.0/(+g[e>>2]/120.0);e=z+6204|0;b=c[e>>2]|0;a:do if((b|0)!=0?(b|0)==(c[v>>2]|0):0){Wg(b);f=z+6200|0;b=c[f>>2]|0;do if(b|0){if(!(c[b+604>>2]|0))break;if((c[b+100>>2]|0)!=(c[e>>2]|0))Cb(5921,4833,2379,30213);if(!(a[z+212>>0]|0)){$g();c[f>>2]=0;c[e>>2]=0;break a}rf(A,s,z+6188|0);b=c[(c[f>>2]|0)+604>>2]|0;if(!(!(+g[b+12>>2]!=+g[A>>2])?!(+g[b+16>>2]!=+g[A+4>>2]):0)){Ph(b);b=c[(c[f>>2]|0)+604>>2]|0}n=A;o=c[n+4>>2]|0;p=b+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=o;Qh(c[f>>2]|0);break a}while(0);Cb(5876,4833,2378,30213)}else r=73;while(0);if((r|0)==73){c[z+6200>>2]=0;c[e>>2]=0}b=z+10452|0;h=+g[b>>2];do if(h>0.0){C=h-+g[t>>2];g[b>>2]=C;if(!(C<=0.0))break;Rh(c[z+20>>2]|0)}while(0);b=c[z+6200>>2]|0;do if(!b)r=80;else{if(c[b+8>>2]&512|0){r=80;break}e=z+6148|0;c[e>>2]=b;r=81}while(0);if((r|0)==80){p=s;e=c[p+4>>2]|0;b=q;c[b>>2]=c[p>>2];c[b+4>>2]=e;c[A>>2]=c[q>>2];c[A+4>>2]=c[q+4>>2];b=Sh(A)|0;e=z+6148|0;c[e>>2]=b;if(!b)i=0;else r=81}if((r|0)==81)i=c[b+604>>2]|0;p=z+6152|0;c[p>>2]=i;b=Th()|0;o=(b|0)!=0;f=z+6408|0;do if(o){g[f>>2]=+yf(+g[f>>2]+ +g[t>>2]*6.0,1.0);if(!i)break;if(Uh(i,b)|0)break;c[e>>2]=0;c[p>>2]=0}else g[f>>2]=0.0;while(0);m=z+6244|0;b=-1;k=0;i=0;do{if(a[z+876+i>>0]|0){if(!(c[e>>2]|0))f=(Vh(m)|0)^1;else f=1;a[z+891+i>>0]=f&1}t=a[z+212+i>>0]|0;k=(t&255|k&1|0)!=0;do if(t<<24>>24){if((b|0)!=-1?!(+g[z+856+(i<<2)>>2]<+g[z+856+(b<<2)>>2]):0)break;b=i}while(0);i=i+1|0}while((i|0)!=5);if((b|0)==-1)n=1;else n=(a[z+891+b>>0]|0)!=0;i=z+10988|0;b=c[i>>2]|0;do if((b|0)==-1){if(n?k|(c[e>>2]|0)!=0:0){b=1;break}b=(Vh(m)|0)^1}else b=(b|0)!=0;while(0);a[z+776>>0]=b&1;f=z+10992|0;b=c[f>>2]|0;if((b|0)==-1)b=o|(c[v>>2]|0)!=0;else b=(b|0)!=0;a[z+777>>0]=b&1;q=z+10996|0;a[z+778>>0]=((c[q>>2]|0)+1|0)>>>0>1&1;c[z+6528>>2]=0;c[q>>2]=-1;c[f>>2]=-1;c[i>>2]=-1;df(A,1.0,1.0);q=A;r=c[q+4>>2]|0;t=z+10436|0;c[t>>2]=c[q>>2];c[t+4>>2]=r;if(!(a[u>>0]|0))b=0;else b=(c[z+6900>>2]&16|0)!=0;do if(n|b){b=c[e>>2]|0;if(!b)break;i=z+220|0;h=+g[i>>2];if(!(h!=0.0))break;if(a[b+143>>0]|0)break;if(a[z+225>>0]|0){if(!(a[z+136>>0]|0))break;u=b+592|0;C=+g[u>>2];h=+Wh(h*.10000000149011612+C,.5,2.5);C=h/C;g[u>>2]=h;u=b+28|0;gf(x,u,1.0-C);t=b+20|0;rf(y,s,t);Yh(w,x,y);Xh(A,w,u);Zh(t,A);Zh(b+12|0,A);sf(u,C);sf(b+36|0,C);break}while(1){e=c[b+8>>2]|0;if((e&16777752|0)!=16777232)break;f=c[b+600>>2]|0;if(!f)break;else b=f}if(e&528|0)break;h=+_h(b)*5.0;C=+$h(b+68|0);C=+(~~+yf(h,(C+ +g[b+88>>2]*2.0)*.6700000166893005)|0);ai(b,+g[b+108>>2]-+g[i>>2]*C)}else{c[p>>2]=0;c[e>>2]=0}while(0);do if(!(c[v>>2]|0)){b=z+6144|0;e=c[b>>2]|0;if(!e)break;if(!(a[e+140>>0]|0))break;if(!(nh(0,0)|0))break;c[(c[b>>2]|0)+632>>2]=0}while(0);e=z+6088|0;if(c[e>>2]|0){b=0;do{y=c[(bi(e,b)|0)>>2]|0;x=y+140|0;a[y+141>>0]=a[x>>0]|0;a[x>>0]=0;a[y+142>>0]=0;b=b+1|0}while((b|0)!=(c[e>>2]|0))}b=z+6144|0;e=c[b>>2]|0;do if(e|0){if(a[e+141>>0]|0)break;ci()}while(0);di(z+6112|0,0);ei(z+6256|0,0);fi(c[b>>2]|0);df(A,400.0,400.0);gi(A,4);hi(5968,0,0)|0;l=B;return}Cb(5168,4833,2267,30213)}function Hh(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Ih(a){a=a|0;return (c[a+68>>2]|0)!=0|0}function Jh(){var b=0,d=0,e=0,f=0;d=l;l=l+32|0;e=d;b=c[244]|0;f=Bf(12)|0;a[e>>0]=a[d+20>>0]|0;f=Lg(12,e,f)|0;ii(f);c[b+10488>>2]=f;c[e>>2]=5983;c[e+4>>2]=Gf(5983,0,0)|0;c[e+8>>2]=1;c[e+12>>2]=1;c[e+16>>2]=3;mi(b+10468|0,e);if(ni(b+10456|0)|0){oi(c[b+20>>2]|0);a[b>>0]=1;l=d;return}else Cb(5990,4833,2592,6016)}function Kh(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;f=c[244]|0;if(a|0?Ih(a)|0:0){b=+g[a+4>>2];if(!(b>0.0))Cb(11988,4833,5247,11973);e=f+5928|0;c[e>>2]=a;g[f+5936>>2]=+g[f+132>>2]*+g[a>>2]*b;d=c[f+6140>>2]|0;if(!d)b=0.0;else{b=+_h(d);a=c[e>>2]|0}g[f+5932>>2]=b;h=(c[a+68>>2]|0)+28|0;d=c[h+4>>2]|0;e=f+5940|0;c[e>>2]=c[h>>2];c[e+4>>2]=d;c[f+5948>>2]=a;g[f+5952>>2]=b;return}Cb(11948,4833,5246,11973)}function Lh(){var a=0,b=0;b=c[244]|0;a=c[b+140>>2]|0;if(!a)a=c[(Hh((c[b+128>>2]|0)+36|0,0)|0)>>2]|0;return a|0}function Mh(){var b=0;b=c[244]|0;a[b+6896>>0]=0;nr(b+6908|0);c[b+6968>>2]=0;c[b+6964>>2]=0;g[b+6960>>2]=3402823466385288598117041.0e14;c[b+6972>>2]=-1;return}function Nh(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Oh(a){a=a|0;a=(a|0)==0?(c[244]|0)+204|0:a;if(!(+g[a>>2]>=-256.0e3))a=0;else a=+g[a+4>>2]>=-256.0e3;return a|0}function Ph(a){a=a|0;var b=0,d=0;b=c[244]|0;if((c[a+8>>2]&256|0)==0?(d=b+10452|0,+g[d>>2]<=0.0):0)c[d>>2]=c[b+16>>2];return}function Qh(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[244]|0;c[e+6144>>2]=a;if(a|0){d=c[a+604>>2]|0;d=(d|0)==0?a:d;b=d+8|0;a=c[b>>2]|0;if((((a&67108864|0)!=0?(c[e+6172>>2]|0)!=0:0)?(f=c[e+6196>>2]|0,(f|0)!=0):0)?(c[f+604>>2]|0)!=(d|0):0){$g();a=c[b>>2]|0}if(!(a&8192))Fl(d)}return}function Rh(a){a=a|0;var b=0,d=0;d=l;l=l+16|0;b=d;g[(c[244]|0)+10452>>2]=0.0;if(a|0){Hr(b);Bs(b);a=Yf(a,10962)|0;if(a|0){u9(c[b+8>>2]|0,1,c[b>>2]|0,a)|0;k9(a)|0}Mr(b)}l=d;return}function Sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;g=m+16|0;h=m+8|0;i=m;k=c[244]|0;j=k+6088|0;k=k+5176|0;d=c[j>>2]|0;a:while(1){if((d|0)>0)e=d;else{d=0;break}while(1){f=e;e=e+-1|0;d=c[(bi(j,e)|0)>>2]|0;if(a[d+140>>0]|0?(c[d+8>>2]&512|0)==0:0)break;if((f|0)<=1){d=0;break a}}rf(h,d+448|0,k);tf(i,d+456|0,k);lj(g,h,i);if(nj(g,b)|0)break;else d=e}l=m;return d|0}function Th(){var a=0,b=0,d=0,e=0;a=c[244]|0;b=c[a+6244>>2]|0;a:do if((b|0)>0){e=c[a+6252>>2]|0;while(1){d=b;b=b+-1|0;a=c[e+(b*24|0)+4>>2]|0;if(a|0?c[a+8>>2]&134217728|0:0)break a;if((d|0)<=1){a=0;break}}}else a=0;while(0);return a|0}function Uh(a,b){a=a|0;b=b|0;a:do if((c[a+604>>2]|0)==(b|0))a=1;else while(1){if((a|0)==(b|0)){a=1;break a}a=c[a+600>>2]|0;if(!a){a=0;break}}while(0);return a|0}function Vh(a){a=a|0;return (c[a>>2]|0)==0|0}function Wh(a,b,c){a=+a;b=+b;c=+c;return +(ac?c:a)}function Xh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]/+g[c>>2],+g[b+4>>2]/+g[c+4>>2]);return}function Yh(a,b,c){a=a|0;b=b|0;c=c|0;df(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2]);return}function Zh(a,b){a=a|0;b=b|0;g[a>>2]=+g[b>>2]+ +g[a>>2];a=a+4|0;g[a>>2]=+g[b+4>>2]+ +g[a>>2];return}function _h(a){a=a|0;return +(+g[(c[244]|0)+5936>>2]*+g[a+592>>2])}function $h(a){a=a|0;return +(+g[a+12>>2]-+g[a+4>>2])}function ai(a,b){a=a|0;b=+b;var c=0.0,d=0;d=a+108|0;a=a+244|0;c=+g[d>>2]+ +g[a>>2];g[d>>2]=b;g[a>>2]=c-b;return}function bi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function ci(){var b=0,d=0,e=0;e=(c[244]|0)+6088|0;b=c[e>>2]|0;a:do if((b|0)>0){while(1){d=b;b=b+-1|0;if(a[(c[(bi(e,b)|0)>>2]|0)+141>>0]|0?(c[(c[(bi(e,b)|0)>>2]|0)+8>>2]&16777216|0)==0:0)break;if((d|0)<=1)break a}Qh(c[(bi(e,b)|0)>>2]|0)}while(0);return}function di(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Oi(a,Ts(a,b)|0);c[a>>2]=b;return}function ei(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))hu(a,iu(a,b)|0);c[a>>2]=b;return}function fi(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=(c[244]|0)+6244|0;if(!(Vh(h)|0)){b=c[h>>2]|0;a:do if((a|0)!=0&(b|0)>0){f=a+604|0;e=0;while(1){b=c[(Dj(h,e)|0)+4>>2]|0;if(b|0){b=c[b+8>>2]|0;if(!(b&67108864))break;if(!(b&16777216)){b=c[h>>2]|0;if((e|0)<(b|0))b=e;else{g=e;i=b;break a}do{if(!(c[(Dj(h,b)|0)+4>>2]|0))d=0;else{d=c[(c[(Dj(h,b)|0)+4>>2]|0)+604>>2]|0;d=(d|0)==(c[f>>2]|0)}b=b+1|0;a=c[h>>2]|0}while(!(d|(b|0)>=(a|0)));if(!d){g=e;i=a;break a}}}b=e+1|0;a=c[h>>2]|0;if((b|0)<(a|0))e=b;else{g=b;i=a;break a}}Cb(11410,4833,3767,11462)}else{g=0;i=b}while(0);if((g|0)<(i|0))hk(g)}return}function gi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;f=a;e=c[f+4>>2]|0;a=d+6284|0;c[a>>2]=c[f>>2];c[a+4>>2]=e;c[d+6308>>2]=b|0?b:1;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=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=l;l=l+272|0;ea=ia+128|0;da=ia+104|0;fa=ia+256|0;i=ia+120|0;D=ia+224|0;L=ia+72|0;y=ia+216|0;w=ia+96|0;x=ia+240|0;$=ia+48|0;aa=ia+176|0;F=ia+88|0;G=ia+80|0;ba=ia+32|0;ca=ia+24|0;S=ia+160|0;T=ia+16|0;N=ia+8|0;O=ia;I=ia+64|0;J=ia+152|0;K=ia+144|0;V=ia+208|0;W=ia+192|0;ha=c[244]|0;if(!b)Cb(6802,4833,4348,30345);if(!(a[ha>>0]|0))Cb(6027,4833,4349,30345);k=ha+6076|0;if((c[ha+6080>>2]|0)==(c[k>>2]|0))Cb(6813,4833,4350,30345);q=(f&512|0)==0?f:f|6;f=Xj(b)|0;c[fa>>2]=f;if(!f){if(!(c[ha+6308>>2]|0)){df(da,0.0,0.0);h=da;f=c[h>>2]|0;h=c[h+4>>2]|0}else{h=ha+6284|0;f=c[h>>2]|0;h=c[h+4>>2]|0;_=da;c[_>>2]=f;c[_+4>>2]=h}_=i;c[_>>2]=f;c[_+4>>2]=h;c[ea>>2]=c[i>>2];c[ea+4>>2]=c[i+4>>2];f=Ik(b,ea,q)|0;c[fa>>2]=f}v=c[k>>2]|0;i=c[f+480>>2]|0;_=(i|0)!=(v|0);h=f+8|0;if(_)c[h>>2]=q;else q=c[h>>2]|0;h=(i|0)<(v+-1|0);B=(c[f+184>>2]|0)==1;C=(q&67108864|0)!=0;if(C){R=Dj(ha+6244|0,c[ha+6256>>2]|0)|0;f=c[fa>>2]|0;R=h|(c[f+160>>2]|0)!=(c[R>>2]|0)|(f|0)!=(c[R+4>>2]|0)}else R=h;Z=B|R;a[f+145>>0]=Z&1;U=(e|0)!=0;a[f+146>>0]=U&1;if(Z)Jk(f,8,1);f=ha+6112|0;if(Kk(f)|0)z=0;else z=c[(Lk(f)|0)>>2]|0;if(_)X=q&83886080|0?z:0;else X=c[(c[fa>>2]|0)+600>>2]|0;Y=(X|0)!=0;u=q&16777216;Z=(u|0)==0;if(!(Z|Y))Cb(6847,4833,4387,30345);Mk(f,fa);Nk(c[fa>>2]|0);Ok(c[fa>>2]|0,1);if(C){P=ha+6256|0;Q=Dj(ha+6244|0,c[P>>2]|0)|0;c[Q+4>>2]=c[fa>>2];dk(P,Q);c[(c[fa>>2]|0)+160>>2]=c[Q>>2]}f=ha+6304|0;h=c[f>>2]|0;if(!h)s=0;else{i=c[fa>>2]|0;k=i+188|0;r=c[k>>2]|0;s=(r&h|0)!=0;if(s?(t=ha+6276|0,+xf(t)>9.999999747378752e-06):0){Q=ha+6268|0;P=c[Q+4>>2]|0;M=i+200|0;c[M>>2]=c[Q>>2];c[M+4>>2]=P;M=t;P=c[M+4>>2]|0;Q=i+208|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P;c[k>>2]=r&-15}else Pk(i,ha+6268|0,h);c[f>>2]=0}f=ha+6308|0;h=c[f>>2]|0;if(!h){i=0;r=0}else{k=c[fa>>2]|0;if(!(c[k+192>>2]&h)){i=0;r=0}else{i=+g[ha+6284>>2]>0.0;r=+g[ha+6288>>2]>0.0}Qk(k,ha+6284|0,h);c[f>>2]=0}f=ha+6312|0;if(!(c[f>>2]|0)){if(_){df(ea,0.0,0.0);M=ea;P=c[M+4>>2]|0;Q=(c[fa>>2]|0)+60|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}}else{Q=c[fa>>2]|0;H=ha+6292|0;M=c[H+4>>2]|0;P=Q+60|0;c[P>>2]=c[H>>2];c[P+4>>2]=M;E=+Rk(Q);E=E+ +Sk(c[fa>>2]|0);Q=(c[fa>>2]|0)+64|0;g[Q>>2]=E+ +g[Q>>2];c[f>>2]=0}f=ha+6316|0;h=c[f>>2]|0;if(h|0){Tk(c[fa>>2]|0,(a[ha+6300>>0]|0)!=0,h);c[f>>2]=0}f=ha+6345|0;if(a[f>>0]|0){Uk();a[f>>0]=0}f=c[fa>>2]|0;if(a[f+145>>0]|0)Jk(f,8,0);f=c[fa>>2]|0;if(_){c[f+600>>2]=X;k=f+608|0;c[k>>2]=f;h=f+604|0;c[h>>2]=f;if(!(Z|Y^1))c[h>>2]=c[X+604>>2];A=(q&134217728|0)==0;if(!((q&83886080|0)==0|A&Y^1))c[k>>2]=c[X+608>>2];a[f+140>>0]=1;c[f+148>>2]=0;Q=ha+6136|0;H=c[Q>>2]|0;c[Q>>2]=H+1;c[f+152>>2]=H;c[f+156>>2]=0;Of(da,-3402823466385288598117041.0e14,-3402823466385288598117041.0e14,3402823466385288598117041.0e14,3402823466385288598117041.0e14);Ki(ea,da);H=c[fa>>2]|0;Q=H+432|0;c[Q>>2]=c[ea>>2];c[Q+4>>2]=c[ea+4>>2];c[Q+8>>2]=c[ea+8>>2];c[Q+12>>2]=c[ea+12>>2];c[H+480>>2]=v;Vk(H+420|0,1);Hu(c[(c[fa>>2]|0)+596>>2]|0);H=c[(c[fa>>2]|0)+596>>2]|0;c[H+36>>2]=(a[ha+5233>>0]|0?2:0)|d[ha+5232>>0];lv(H,c[(c[ha+5928>>2]|0)+68>>2]|0);Wk(D);H=(u|0)!=0;u=C|H^1;if(u)Hi(D,D+8|0,1);else Hi(X+432|0,X+440|0,1);do if(R){f=c[fa>>2]|0;c[f+180>>2]=-1;if(s|C^1)break;M=ha+204|0;P=c[M+4>>2]|0;Q=f+12|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=P}while(0);M=(q&1|0)!=0;Q=M^1;P=(q&32|0)==0;if(P&Q){Xk(ea,c[fa>>2]|0);do if((c[ha+6148>>2]|0)==(c[fa>>2]|0)){if(!(hh(ea,ea+8|0,1)|0))break;if(!(a[ha+881>>0]|0))break;v=c[fa>>2]|0;t=v+143|0;a[t>>0]=a[t>>0]^1;Ph(v);Qh(c[fa>>2]|0)}while(0);f=c[fa>>2]|0}else{f=c[fa>>2]|0;a[f+143>>0]=0}Yk(ea,f);f=c[fa>>2]|0;v=ea;k=c[v+4>>2]|0;h=f+52|0;c[h>>2]=c[v>>2];c[h+4>>2]=k;h=f+184|0;k=c[h>>2]|0;if((k|0)>0)c[h>>2]=k+-1;do if(!((q&100663296|0)==0|R^1)){c[h>>2]=1;if(!(q&64))break;if(!i){g[f+36>>2]=0.0;g[f+28>>2]=0.0}if(!r){g[f+40>>2]=0.0;g[f+32>>2]=0.0}df(ea,0.0,0.0);f=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;v=f+52|0;c[v>>2]=c[k>>2];c[v+4>>2]=t}while(0);do if(!H){v=(q&201326592|0)==67108864;t=c[(v?ha+5136|0:ha+5104|0)>>2]|0;c[f+92>>2]=t;m=(c[j>>2]=t,+g[j>>2]);if(v){h=ha+5140|0;break}else{h=ha+5108|0;break}}else{v=c[ha+5128>>2]|0;c[f+92>>2]=v;h=ha+5132|0;m=(c[j>>2]=v,+g[j>>2])}while(0);v=c[h>>2]|0;c[f+96>>2]=v;h=ha+5096|0;k=c[h+4>>2]|0;t=f+84|0;c[t>>2]=c[h>>2];c[t+4>>2]=k;n=(c[j>>2]=v,+g[j>>2]);if((q&83951616|0)==16777216&n==0.0){if(!(q&1024))m=0.0;else m=+g[ha+5100>>2];df(ea,0.0,m);v=c[fa>>2]|0;k=ea;t=c[k+4>>2]|0;f=v+84|0;c[f>>2]=c[k>>2];c[f+4>>2]=t;E=+g[v+96>>2];f=v;p=+g[v+92>>2]}else{E=n;p=m}Zk(L,f,f+52|0);df(y,3402823466385288598117041.0e14,3402823466385288598117041.0e14);v=(q&64|0)!=0;f=c[fa>>2]|0;do if(v){if(a[f+143>>0]|0){ga=90;break}if(!i){t=c[L>>2]|0;c[y>>2]=t;c[f+36>>2]=t}if(r)break;t=c[L+4>>2]|0;c[y+4>>2]=t;c[f+40>>2]=t}else ga=90;while(0);do if((ga|0)==90){h=(c[f+164>>2]|0)>0;if(!h?(c[f+168>>2]|0)<=0:0)break;if(!(i|h^1)){if(!(a[f+172>>0]|0)){h=f+36|0;m=+g[L>>2]}else{t=f+36|0;h=t;m=+vg(+g[t>>2],+g[L>>2])}g[y>>2]=m;g[h>>2]=m}do if(!r){if((c[f+168>>2]|0)<=0)break;if(!(a[f+172>>0]|0)){h=f+40|0;m=+g[L+4>>2]}else{t=f+40|0;h=t;m=+vg(+g[t>>2],+g[L+4>>2])}g[y+4>>2]=m;g[h>>2]=m}while(0);if(a[f+143>>0]|0)break;Ph(f);f=c[fa>>2]|0}while(0);t=f+36|0;h=c[t+4>>2]|0;k=w;c[k>>2]=c[t>>2];c[k+4>>2]=h;c[ea>>2]=c[w>>2];c[ea+4>>2]=c[w+4>>2];_k(da,f,ea);f=c[fa>>2]|0;k=da;h=c[k>>2]|0;k=c[k+4>>2]|0;w=f+36|0;c[w>>2]=h;c[w+4>>2]=k;if(!(a[f+143>>0]|0)){t=ea;c[t>>2]=h;c[t+4>>2]=k;t=h}else{Xk(x,f);eh(ea,x);k=ea;f=c[fa>>2]|0;t=c[k>>2]|0;k=c[k+4>>2]|0}h=f+28|0;x=h;c[x>>2]=t;c[x+4>>2]=k;do if(!u)if(r&i){u=f+36|0;w=c[u+4>>2]|0;x=h;c[x>>2]=c[u>>2];c[x+4>>2]=w;break}else Cb(6910,4833,4567,30345);while(0);if(!(a[f+143>>0]|0)){x=f+44|0;w=f+36|0;n=+g[(+g[y>>2]!=3402823466385288598117041.0e14?w:x)>>2];o=+g[(+g[y+4>>2]!=3402823466385288598117041.0e14?w:x)+4>>2];do if(!(q&16384)){if(!(+g[f+56>>2]>o)){u=0;break}u=(q&8|0)==0}else u=1;while(0);t=f+129|0;h=u&1;a[t>>0]=h;do if(!(q&32768)){if(u)m=+g[ha+5192>>2];else m=0.0;k=q&2048;r=f+128|0;if((q&8|0)==0?+g[f+52>>2]>n-m-+g[f+84>>2]:0){i=k>>>11&255;a[r>>0]=i;if(!k){f=i;break}else{ga=123;break}}else{a[r>>0]=0;f=0;break}}else{a[f+128>>0]=1;i=1;ga=123}while(0);do if((ga|0)==123){if(u){f=i;break}h=((q&8|0)==0?+g[f+56>>2]>o+ +g[ha+5192>>2]:0)&1;a[t>>0]=h;f=i}while(0);if(!(h<<24>>24))n=0.0;else n=+g[ha+5192>>2];if(!(f<<24>>24))m=0.0;else m=+g[ha+5192>>2];df(ea,n,m);f=c[fa>>2]|0;x=ea;y=c[x+4>>2]|0;ga=f+132|0;c[ga>>2]=c[x>>2];c[ga+4>>2]=y}do if(H){ga=X+300|0;c[f+148>>2]=c[ga>>2];Mk(ga,fa);if(C|s){f=c[fa>>2]|0;break}else{f=c[fa>>2]|0;y=X+216|0;x=c[y>>2]|0;y=c[y+4>>2]|0;ga=f+12|0;c[ga>>2]=x;c[ga+4>>2]=y;ga=f+20|0;c[ga>>2]=x;c[ga+4>>2]=y;break}}while(0);do if(+g[f+200>>2]!=3402823466385288598117041.0e14){if(c[f+184>>2]|0){ga=137;break}Yh($,f+36|0,f+208|0);rf(da,f+200|0,$);$k(ea,ha+5224|0,da);Pk(f,ea,0);ga=146}else ga=137;while(0);do if((ga|0)==137){if(!(q&268435456)){if(s|C^1|B^1){ga=146;break}n=+g[f+12>>2];o=+g[f+16>>2];al(ea,n+-1.0,o+-1.0,n+1.0,o+1.0);z=c[fa>>2]|0;bl(da,z+12|0,z+28|0,z+180|0,ea,0);z=da;B=c[z+4>>2]|0;ga=(c[fa>>2]|0)+12|0;c[ga>>2]=c[z>>2];c[ga+4>>2]=B;ga=146;break}if(!s)Cb(6963,4833,4607,30345);m=+g[ha+5160>>2];Eg(ea);if(!(a[z+293>>0]|0)){o=+g[z+20>>2];al(da,m+o,-3402823466385288598117041.0e14,o+ +g[z+28>>2]-m-+g[z+132>>2],3402823466385288598117041.0e14);c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}else{B=z+24|0;n=+g[B>>2];n=n+ +Rk(z);o=+g[B>>2];o=o+ +Rk(z);al(da,-3402823466385288598117041.0e14,n,3402823466385288598117041.0e14,o+ +Sk(z));c[ea>>2]=c[da>>2];c[ea+4>>2]=c[da+4>>2];c[ea+8>>2]=c[da+8>>2];c[ea+12>>2]=c[da+12>>2]}f=c[fa>>2]|0;bl(da,f+12|0,f+28|0,f+180|0,ea,0);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=(q&33554432|0)!=0}while(0);do if((ga|0)==146){i=(q&33554432|0)!=0;if(!(s|i^1)?(B=ha+204|0,x=c[B>>2]|0,B=c[B+4>>2]|0,y=ea,c[y>>2]=x,c[y+4>>2]=B,n=(c[j>>2]=x,+g[j>>2]),o=(c[j>>2]=B,+g[j>>2]),al(da,n+-16.0,o+-8.0,n+24.0,o+24.0),B=c[fa>>2]|0,bl($,ea,B+28|0,B+180|0,da,0),B=c[fa>>2]|0,x=$,y=c[x+4>>2]|0,z=B+12|0,c[z>>2]=c[x>>2],c[z+4>>2]=y,(c[B+180>>2]|0)==-1):0){df(aa,2.0,2.0);tf($,ea,aa);y=$;z=c[y+4>>2]|0;B=(c[fa>>2]|0)+12|0;c[B>>2]=c[y>>2];c[B+4>>2]=z}h=c[fa>>2]|0;if((q&50331648|0)!=0|s){f=h;h=i;break}if((c[h+164>>2]|0)>=1){f=h;h=i;break}if((c[h+168>>2]|0)>=1){f=h;h=i;break}f=ha+4|0;if(!(+g[f>>2]>0.0)){f=h;h=i;break}if(!(+g[ha+8>>2]>0.0)){f=h;h=i;break}$k(ea,ha+5216|0,ha+5224|0);z=c[fa>>2]|0;tf(aa,z+12|0,z+28|0);$k($,aa,ea);rf(da,$,(c[fa>>2]|0)+28|0);z=(c[fa>>2]|0)+12|0;y=da;h=c[y+4>>2]|0;B=z;c[B>>2]=c[y>>2];c[B+4>>2]=h;rf($,f,ea);cl(da,z,$);f=c[fa>>2]|0;z=da;B=c[z+4>>2]|0;h=f+12|0;c[h>>2]=c[z>>2];c[h+4>>2]=B;h=i}while(0);df(ea,+(~~+g[f+12>>2]|0),+(~~+g[f+16>>2]|0));s=c[fa>>2]|0;y=ea;z=c[y+4>>2]|0;B=s+20|0;c[B>>2]=c[y>>2];c[B+4>>2]=z;m=+g[s+28>>2];if(v|(h|!(m>0.0)))m=+g[ha+5932>>2]*16.0;else m=m*.6499999761581421;g[s+484>>2]=+(~~m|0);r=s+628|0;f=c[r>>2]|0;do if((f|0)==2147483647)f=2147483647;else{B=c[s+612>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+620>>2]=f;k=s+632|0;f=c[k>>2]|0;i=s+616|0;do if((f|0)==2147483647)f=2147483647;else{B=c[i>>2]|0;h=B+1|0;if((B|0)==-1){f=2147483647;break}f=(h+f|0)%(h|0)|0}while(0);c[s+624>>2]=f;c[i>>2]=-1;c[s+612>>2]=-1;c[k>>2]=2147483647;c[r>>2]=2147483647;dl(ea,s);B=ea;y=c[B+4>>2]|0;f=(c[fa>>2]|0)+104|0;c[f>>2]=c[B>>2];c[f+4>>2]=y;df(ea,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=c[fa>>2]|0;y=ea;B=c[y+4>>2]|0;z=f+112|0;c[z>>2]=c[y>>2];c[z+4>>2]=B;z=((q&50331648|0)==0|C)&((q&4096|0)==0&R);do if(!A){if((f|0)!=(Th()|0))break;f=c[f+596>>2]|0;Qv(f,D,D+8|0,Rf(41,+g[ha+6408>>2])|0,0.0,15);f=c[fa>>2]|0}while(0);Xk($,f);f=c[fa>>2]|0;if(!(a[f+143>>0]|0)){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;x=q&131072;y=x>>>17;x=x>>>15;n=+g[ha+5932>>2];n=+(~~+vg(n*1.350000023841858,p+1.0+n*.20000000298023224)|0);m=+(~~(n*.75)|0);do if(v)f=-1;else{if((c[f+164>>2]|0)>=1){f=-1;break}if(!((q&2|0)==0?(c[f+168>>2]|0)<1:0)){f=-1;break}df(aa,3402823466385288598117041.0e14,3402823466385288598117041.0e14);df(ba,3402823466385288598117041.0e14,3402823466385288598117041.0e14);el(6985);r=ha+6148|0;s=ha+204|0;t=ha+6188|0;u=ha+881|0;w=ha+6528|0;k=0;while(1){i=c[fa>>2]|0;f=i+20|0;tf(ea,f,i+28|0);i=57824+(k*24|0)|0;fl(ca,f,ea,i);gf(T,57824+(k*24|0)+8|0,m);tf(ea,ca,T);lj(S,ca,ea);gl(S);hl(S,Xg(c[fa>>2]|0,k)|0,T,N,32)|0;f=a[N>>0]|0;if((f|a[T>>0])<<24>>24)c[w>>2]=6-k;h=c[r>>2]|0;f=f<<24>>24==0;do if((h|0)!=(c[fa>>2]|0)|f)ga=181;else{if(!((k|0)==0&(a[u>>0]|0)!=0)){ga=181;break}G=L;f=c[G+4>>2]|0;ga=I;c[ga>>2]=c[G>>2];c[ga+4>>2]=f;c[ea>>2]=c[I>>2];c[ea+4>>2]=c[I+4>>2];_k(O,h,ea);ga=O;h=c[ga+4>>2]|0;f=ba;c[f>>2]=c[ga>>2];c[f+4>>2]=h;$g();f=a[N>>0]|0;h=a[T>>0]|0;ga=184}while(0);if((ga|0)==181){ga=0;if(!f){rf(O,s,t);eh(K,S);Yh(J,K,i);tf(ea,O,J);il(c[fa>>2]|0,ea,i,aa,ba)}f=a[N>>0]|0;h=a[T>>0]|0;if(!((k|0)!=0&(h|f)<<24>>24==0))ga=184}if((ga|0)==184){ga=0;c[da+(k<<2)>>2]=Rf(f<<24>>24==0?(h<<24>>24?31:30):32,1.0)|0}if((k|0)==(y|0))break;else k=k+1|0}if(!x)f=-1;else{k=ha+208|0;r=ha+6192|0;s=T+4|0;t=ha+204|0;u=ha+6188|0;v=ha+6168|0;f=-1;i=0;do{jl(S,c[fa>>2]|0,i,m,5.0);hl(S,Xg(c[fa>>2]|0,i+4|0)|0,ea,ca,32)|0;do if(a[ea>>0]|0){h=a[ca>>0]|0;if(!(+g[v>>2]>.05000000074505806)&h<<24>>24==0)break;c[w>>2]=(i&1)+3;if(h<<24>>24)ga=192}else{if(!(a[ca>>0]|0))break;c[w>>2]=(i&1)+3;ga=192}while(0);if((ga|0)==192){ga=0;J=(c[fa>>2]|0)+20|0;K=c[J+4>>2]|0;L=T;c[L>>2]=c[J>>2];c[L+4>>2]=K;bf(N);switch(i|0){case 0:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2];break}case 1:{df(O,1.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2]+5.0;break}case 2:{df(O,0.0,1.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[s>>2]=+g[k>>2]-+g[r>>2]+5.0;break}case 3:{df(O,0.0,0.0);J=O;K=c[J+4>>2]|0;L=N;c[L>>2]=c[J>>2];c[L+4>>2]=K;g[T>>2]=+g[t>>2]-+g[u>>2];break}default:{}}il(c[fa>>2]|0,T,N,aa,ba);f=i}i=i+1|0}while((i|0)!=(x|0))}kl();if(+g[ba>>2]!=3402823466385288598117041.0e14){O=c[fa>>2]|0;K=ba;L=c[K+4>>2]|0;N=O+36|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Ph(O)}m=+g[aa>>2];if(m!=3402823466385288598117041.0e14){df(ea,+(~~m|0),+(~~+g[aa+4>>2]|0));O=c[fa>>2]|0;L=ea;K=c[L>>2]|0;L=c[L+4>>2]|0;N=O+12|0;c[N>>2]=K;c[N+4>>2]=L;N=O+20|0;c[N>>2]=K;c[N+4>>2]=L;Ph(O)}O=c[fa>>2]|0;K=O+36|0;L=c[K+4>>2]|0;N=O+28|0;c[N>>2]=c[K>>2];c[N+4>>2]=L;Xk(ea,O);c[$>>2]=c[ea>>2];c[$+4>>2]=c[ea+4>>2];c[$+8>>2]=c[ea+8>>2];c[$+12>>2]=c[ea+12>>2]}while(0);O=Rf(ll(q)|0,1.0)|0;L=c[fa>>2]|0;N=c[L+596>>2]|0;df(aa,0.0,+Rk(L));tf(ea,L+20|0,aa);L=c[fa>>2]|0;tf(ba,L+20|0,L+28|0);Qv(N,ea,ba,O,p,M?15:12);do if(z)h=1;else{h=c[ha+6144>>2]|0;if(!h){h=0;break}h=(c[(c[fa>>2]|0)+608>>2]|0)==(c[h+608>>2]|0)}while(0);if(!M){O=c[(c[fa>>2]|0)+596>>2]|0;Qv(O,$,$+8|0,Rf(h?11:10,1.0)|0,p,3)}if(q&1024|0){ml(ea,c[fa>>2]|0);nl(aa,c[fa>>2]|0);mj(ea,aa);O=c[(c[fa>>2]|0)+596>>2]|0;h=Rf(13,1.0)|0;Qv(O,ea,ea+8|0,h,M?p:0.0,3);h=ha+5156|0;do if(+g[h>>2]>0.0){i=c[fa>>2]|0;if(!(+g[ea+12>>2]<+g[i+24>>2]+ +g[i+32>>2]))break;N=c[i+596>>2]|0;ol(aa,ea);pl(ba,ea);O=Rf(5,1.0)|0;Ov(N,aa,ba,O,+g[h>>2])}while(0)}h=c[fa>>2]|0;if(a[h+128>>0]|0){ql(1);h=c[fa>>2]|0}if(a[h+129>>0]|0)ql(0);if(!(q&2)){m=p+E;k=ea+4|0;i=0;while(1){r=c[fa>>2]|0;h=r+20|0;tf(aa,h,r+28|0);fl(ea,h,aa,57824+(i*24|0)|0);h=c[(c[fa>>2]|0)+596>>2]|0;r=57824+(i*24|0)+8|0;s=(i|0)!=0;if(s)df(ca,E,n);else df(ca,n,E);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);h=c[(c[fa>>2]|0)+596>>2]|0;if(s)df(ca,n,E);else df(ca,E,n);Yh(ba,r,ca);tf(aa,ea,ba);ij(h,aa);O=c[(c[fa>>2]|0)+596>>2]|0;df(aa,+g[ea>>2]+m*+g[r>>2],+g[k>>2]+m*+g[57824+(i*24|0)+12>>2]);Hv(O,aa,p,c[57824+(i*24|0)+16>>2]|0,c[57824+(i*24|0)+20>>2]|0);rl(c[(c[fa>>2]|0)+596>>2]|0,c[da+(i<<2)>>2]|0);if((i|0)==(y|0))break;else i=i+1|0}}if(E>0.0){L=c[fa>>2]|0;N=c[L+596>>2]|0;O=L+20|0;tf(ea,O,L+28|0);Pv(N,O,ea,Rf(5,1.0)|0,p,15,E)}if((f|0)!=-1){jl(ea,c[fa>>2]|0,f,n,0.0);N=c[(c[fa>>2]|0)+596>>2]|0;O=Rf(29,1.0)|0;Ov(N,ea,ea+8|0,O,+vg(1.0,E))}f=ha+5156|0;if(!(M|!(+g[f>>2]>0.0))){O=c[(c[fa>>2]|0)+596>>2]|0;ol(aa,$);N=ha+5108|0;df(ba,+g[N>>2],-1.0);tf(ea,aa,ba);pl(S,$);df(T,-+g[N>>2],-1.0);tf(ca,S,T);T=Rf(5,1.0)|0;Ov(O,ea,ca,T,+g[f>>2])}}else{T=ha+5156|0;S=c[T>>2]|0;c[T>>2]=c[f+96>>2];O=$;N=c[O+4>>2]|0;L=F;c[L>>2]=c[O>>2];c[L+4>>2]=N;L=$+8|0;N=c[L+4>>2]|0;O=G;c[O>>2]=c[L>>2];c[O+4>>2]=N;O=Rf(12,1.0)|0;c[da>>2]=c[F>>2];c[da+4>>2]=c[F+4>>2];c[ea>>2]=c[G>>2];c[ea+4>>2]=c[G+4>>2];dj(da,ea,O,1,p);c[T>>2]=S}f=c[fa>>2]|0;O=f+36|0;S=c[O+4>>2]|0;T=f+44|0;c[T>>2]=c[O>>2];c[T+4>>2]=S;g[f+68>>2]=+g[f+84>>2]-+g[f+104>>2];n=+g[f+88>>2]-+g[f+108>>2];n=n+ +Rk(f);n=n+ +Sk(c[fa>>2]|0);f=c[fa>>2]|0;g[f+72>>2]=n;n=+g[f+104>>2];o=+g[f+84>>2];m=+g[f+60>>2];if(!(m!=0.0))m=+g[f+28>>2]-+g[f+132>>2];g[f+76>>2]=-n-o+m;m=+g[f+64>>2];if(!(m!=0.0))m=+g[f+32>>2]-+g[f+136>>2];g[f+80>>2]=-+g[f+108>>2]-+g[f+88>>2]+m;p=o+0.0-n;g[f+404>>2]=p;g[f+408>>2]=0.0;g[f+412>>2]=0.0;E=+Rk(f);E=E+ +Sk(c[fa>>2]|0);S=c[fa>>2]|0;df(da,p+0.0,E+ +g[S+88>>2]-+g[S+108>>2]);tf(ea,f+20|0,da);S=c[fa>>2]|0;O=ea;N=c[O>>2]|0;O=c[O+4>>2]|0;T=S+232|0;c[T>>2]=N;c[T+4>>2]=O;T=S+216|0;c[T>>2]=N;c[T+4>>2]=O;T=S+224|0;c[T>>2]=N;c[T+4>>2]=O;T=S+240|0;c[T>>2]=N;c[T+4>>2]=O;T=S+248|0;a[S+293>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;T=ha+5160|0;g[S+296>>2]=+vg(+g[S+84>>2],+g[T>>2]);g[S+264>>2]=(c[j>>2]=O,+g[j>>2])+-9999.0;di(S+300|0,0);S=c[fa>>2]|0;c[S+316>>2]=0;c[S+320>>2]=1;c[S+324>>2]=c[S+484>>2];g[S+328>>2]=-1.0;sl(S+332|0,0);tl((c[fa>>2]|0)+344|0,0);tl((c[fa>>2]|0)+356|0,0);S=c[fa>>2]|0;c[S+416>>2]=0;c[S+268>>2]=0;c[S+312>>2]=S+568;ul(S+368|0,0);tg((c[fa>>2]|0)+488|0,3,+g[T>>2],R);do if(H){f=c[fa>>2]|0;h=f+320|0;i=c[X+320>>2]|0;if((c[h>>2]|0)==(i|0))break;c[h>>2]=i;vl(f+332|0,h)}while(0);i=c[fa>>2]|0;f=i+164|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;f=i+168|0;h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1;if(z)Qh(i);if(!M){if(P){tf(V,(c[fa>>2]|0)+20|0,ha+5144|0);T=a[(c[fa>>2]|0)+143>>0]|0?1:3;c[ea>>2]=c[V>>2];c[ea+4>>2]=c[V+4>>2];fj(ea,T,1.0)}do if(U){E=(+Rk(c[fa>>2]|0)+-4.0)*.5;V=Kg(c[fa>>2]|0,6993,0)|0;nl(W,c[fa>>2]|0);xl(da,W);df(aa,-2.0-E,E+2.0);tf(ea,da,aa);if(!(wl(V,ea,E)|0))break;a[e>>0]=0}while(0);cj(ea,b,0,1,-1.0);e=c[fa>>2]|0;V=e+20|0;T=V;W=c[T>>2]|0;T=c[T+4>>2]|0;f=da;c[f>>2]=W;c[f+4>>2]=T;f=ha+5144|0;df(ba,+g[e+28>>2],+g[ha+5148>>2]*2.0+ +g[ea+4>>2]);tf(aa,V,ba);Eg(ba);V=c[fa>>2]|0;n=+g[V+20>>2]+ +g[V+28>>2];p=(c[j>>2]=W,+g[j>>2]);if(U){h=f;m=+$h($)+-3.0}else{h=f;m=+g[f>>2]}df(ca,n-m,+g[aa+4>>2]);e=ca;V=c[e+4>>2]|0;W=ba+8|0;c[W>>2]=c[e>>2];c[W+4>>2]=V;m=+g[h>>2];if(P)o=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];else o=m;if(U)m=m+ +g[ha+5932>>2]+ +g[ha+5168>>2];f=ha+5120|0;n=+g[f>>2];if(n>0.0)m=+yl(m,o,n);E=o+p;g[da>>2]=E;g[aa>>2]=+g[aa>>2]-m;df(ca,E,+g[(c[fa>>2]|0)+24>>2]);V=ca;W=c[V+4>>2]|0;ca=ba;c[ca>>2]=c[V>>2];c[ca+4>>2]=W;bj(da,aa,b,0,ea,f,ba)}nl(ea,c[fa>>2]|0);da=c[fa>>2]|0;f=da+448|0;c[f>>2]=c[ea>>2];c[f+4>>2]=c[ea+4>>2];c[f+8>>2]=c[ea+8>>2];c[f+12>>2]=c[ea+12>>2];mj(f,da+432|0);da=c[fa>>2]|0;g[da+464>>2]=+g[$>>2]+ +g[da+96>>2];E=+g[$+12>>2];E=E+ +Sk(da);da=c[fa>>2]|0;f=da+96|0;g[da+468>>2]=E+ +g[((q&1024|0)!=0|Q?ha+5156|0:f)>>2];E=+g[f>>2];g[da+472>>2]=+g[da+20>>2]+ +g[da+28>>2]-+g[da+132>>2]-E;g[da+476>>2]=+g[da+24>>2]+ +g[da+32>>2]-+g[da+136>>2]-E;c[da+272>>2]=c[da+100>>2];da=da+276|0;c[da>>2]=c[$>>2];c[da+4>>2]=c[$+4>>2];c[da+8>>2]=c[$+8>>2];c[da+12>>2]=c[$+12>>2];da=hh($,$+8|0,0)|0;f=c[fa>>2]|0;a[f+292>>0]=da&1}E=+g[f+96>>2];Eg(ea);da=c[fa>>2]|0;p=+g[da+464>>2]+.5;E=+vg(0.0,+hf(+g[da+84>>2]*.5-E));g[ea>>2]=+hf(p+E);g[ea+4>>2]=+hf(+g[da+468>>2]+.5);k=ea+8|0;g[k>>2]=+hf(+g[da+472>>2]+.5-E);g[ea+12>>2]=+hf(+g[da+476>>2]+.5);Hi(ea,k,1);k=c[fa>>2]|0;if(_)a[k+142>>0]=0;fa=k+156|0;c[fa>>2]=(c[fa>>2]|0)+1;a[ha+6344>>0]=0;do if(!Z){if(!(q&1))Cb(7e3,4833,4953,30345);if(Y)f=a[X+143>>0]|0;else f=0;i=k+143|0;a[i>>0]=f;do if(!(q&64)){if((c[k+164>>2]|0)>=1)break;if((c[k+168>>2]|0)>=1)break;if(!(+g[k+448>>2]>=+g[k+456>>2]))h=+g[k+452>>2]>=+g[k+460>>2]&1;else h=1;f=(h|f&255)&255;a[i>>0]=f}while(0);if(!(f<<24>>24))break;a[k+140>>0]=0}while(0);if(+g[ha+5092>>2]<=0.0)a[k+140>>0]=0;if((a[k+143>>0]|0)==0?(a[k+140>>0]|0)!=0:0)f=0;else ga=282;do if((ga|0)==282){if((c[k+164>>2]|0)>=1){f=0;break}f=(c[k+168>>2]|0)<1&1}while(0);a[k+144>>0]=f;l=ia;return f<<24>>24==0|0}function ii(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;Hr(b);a[d>>0]=0;qs(b,d);l=c;return}function ji(a,b){a=a|0;b=b|0;a=Ei(Gf(b,0,0)|0)|0;if(!a)a=ss(b)|0;return a|0}function ki(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m+16|0;j=m+8|0;i=m;b=m+28|0;f=m+24|0;h=m+20|0;c[i>>2]=b;c[i+4>>2]=f;do if((y9(e,10870,i)|0)!=2){c[j>>2]=b;c[j+4>>2]=f;if((y9(e,10880,j)|0)==2){df(i,+g[b>>2],+g[f>>2]);$k(j,i,(c[244]|0)+5112|0);k=c[j+4>>2]|0;e=d+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=k;break}c[k>>2]=h;if((y9(e,10891,k)|0)==1)a[d+24>>0]=(c[h>>2]|0)!=0&1}else{df(i,+g[b>>2],+g[f>>2]);j=i;k=c[j+4>>2]|0;e=d+8|0;c[e>>2]=c[j>>2];c[e+4>>2]=k}while(0);l=m;return}function li(b,e){b=b|0;e=e|0;var 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;q=l;l=l+48|0;n=q+32|0;p=q+24|0;o=q+16|0;m=q+8|0;k=q;j=b+6088|0;if(c[j>>2]|0){h=0;do{i=c[(bi(j,h)|0)>>2]|0;if(!(c[i+8>>2]&256)){f=Ei(c[i+4>>2]|0)|0;if(!f)f=ss(c[i>>2]|0)|0;r=i+20|0;s=c[r+4>>2]|0;t=f+8|0;c[t>>2]=c[r>>2];c[t+4>>2]=s;t=i+36|0;s=c[t+4>>2]|0;r=f+16|0;c[r>>2]=c[t>>2];c[r+4>>2]=s;a[f+24>>0]=a[i+143>>0]|0}h=h+1|0}while((h|0)!=(c[j>>2]|0))}t=Kn(e)|0;i=b+10456|0;ys(e,((c[i>>2]|0)*96|0)+t|0);if(c[i>>2]|0){f=0;do{h=ti(i,f)|0;b=h+8|0;if(!(+g[b>>2]==3402823466385288598117041.0e14)){s=c[h>>2]|0;t=f8(s,10904)|0;c[k>>2]=(t|0)==0?s:t;rg(e,10908,k);t=~~+g[h+12>>2];c[m>>2]=~~+g[b>>2];c[m+4>>2]=t;rg(e,10922,m);t=~~+g[h+20>>2];c[o>>2]=~~+g[h+16>>2];c[o+4>>2]=t;rg(e,10933,o);c[p>>2]=d[h+24>>0];rg(e,10945,p);rg(e,7805,n)}f=f+1|0}while((f|0)!=(c[i>>2]|0))}l=q;return}function mi(a,b){a=a|0;b=b|0;if(!(c[a>>2]|0))ju(a,b);else ku(a,c[a+8>>2]|0,b)|0;return}function ni(a){a=a|0;return (c[a>>2]|0)==0|0}function oi(a){a=a|0;var b=0;if(a|0?(b=Zf(a,10959,0,1)|0,b|0):0){As(b);_f(b)}return}function pi(){var b=0,d=0,e=0;e=c[244]|0;b=c[e+128>>2]|0;if(b|0)rw(b);if(a[e>>0]|0){Rh(c[e+20>>2]|0);d=e+6088|0;if((c[d>>2]|0)>0){b=0;do{qi(bi(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ri(d);ri(e+6100|0);c[e+6140>>2]=0;ri(e+6112|0);si(e+6124|0);c[e+6144>>2]=0;c[e+6148>>2]=0;c[e+6152>>2]=0;c[e+6196>>2]=0;c[e+6200>>2]=0;d=e+10456|0;if((c[d>>2]|0)>0){b=0;do{Ug(ti(d,b)|0);b=b+1|0}while((b|0)<(c[d>>2]|0))}ui(e+6208|0);vi(e+6220|0);wi(e+6232|0);xi(e+6244|0);xi(e+6256|0);c[e+6336>>2]=0;c[e+6340>>2]=0;b=0;do{yi(e+6372+(b*12|0)|0);b=b+1|0}while((b|0)!=3);Uu(e+6412|0);zi(e+10424|0);Ai(e+7e3|0);zi(e+7012|0);zi(e+7024|0);Bi(d);Ci(e+10468|0);b=e+10484|0;d=c[b>>2]|0;if(!((d|0)==0|(d|0)==(c[931]|0))){k9(d)|0;c[b>>2]=0}b=e+10488|0;if(c[b>>2]|0)Di(b);a[e>>0]=0}return}function qi(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Sg(b);_f(c[a>>2]|0);c[a>>2]=0}return}function ri(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function si(a){a=a|0;zs(a);return}function ti(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function ui(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function vi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function wi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function xi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function yi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function zi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ai(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Bi(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Ci(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function Di(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0){Es(b);_f(c[a>>2]|0);c[a>>2]=0}return}function Ei(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10456|0;a:do if(!(c[d>>2]|0))b=0;else{b=0;while(1){if((c[(ti(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)==(c[d>>2]|0)){b=0;break a}}b=ti(d,b)|0}while(0);return b|0}function Fi(a){a=a|0;var b=0,d=0;d=(c[244]|0)+10468|0;a:do if((c[d>>2]|0)>0){b=0;while(1){if((c[(Gi(d,b)|0)+4>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[d>>2]|0)){b=0;break a}}b=Gi(d,b)|0}else b=0;while(0);return b|0}function Gi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*20|0)|0;else Cb(12740,37262,1030,12749);return 0}function Hi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;e=l;l=l+48|0;f=e+24|0;i=e+16|0;m=e+8|0;k=e;g=Ii()|0;h=g+596|0;j=c[h>>2]|0;o=a;a=c[o+4>>2]|0;n=m;c[n>>2]=c[o>>2];c[n+4>>2]=a;n=b;a=c[n+4>>2]|0;b=k;c[b>>2]=c[n>>2];c[b+4>>2]=a;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];fv(j,i,f,d);Ki(f,Ji((c[h>>2]|0)+60|0)|0);d=g+432|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];l=e;return}function Ii(){var b=0;b=c[(c[244]|0)+6140>>2]|0;a[b+142>>0]=1;return b|0}function Ji(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<4)|0;else Cb(37253,37262,1040,13011);return 0}function Ki(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+4>>2]);df(a+8|0,+g[b+8>>2],+g[b+12>>2]);return}function Li(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;d=a;b=Ii()|0;e=b+596|0;jv(c[e>>2]|0);Ki(d,Ji((c[e>>2]|0)+60|0)|0);b=b+432|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];l=a;return}function Mi(){var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;h=p;m=c[244]|0;if(!(a[m>>0]|0))Cb(6027,4833,2902,30229);n=m+6080|0;o=m+6076|0;do if((c[n>>2]|0)!=(c[o>>2]|0)){f=m+196|0;if(c[f>>2]|0?(d=m+10436|0,e=m+10444|0,rf(h,d,e),+xf(h)>9.999999747378752e-05):0){oe[c[f>>2]&127](~~+g[d>>2],~~+g[m+10440>>2]);f=d;i=c[f+4>>2]|0;j=e;c[j>>2]=c[f>>2];c[j+4>>2]=i}if((c[m+6112>>2]|0)!=1)Cb(6041,4833,2914,30229);d=c[m+6140>>2]|0;if(d|0?(a[d+142>>0]|0)==0:0)a[d+140>>0]=0;Ni();do if((c[m+6172>>2]|0)==0?(c[m+6156>>2]|0)==0:0){j=c[m+6144>>2]|0;d=(j|0)==0;if(!d?a[j+145>>0]|0:0)break;do if(a[m+876>>0]|0){e=m+6152|0;if(!(c[e>>2]|0)){if(d)break;if(Th()|0)break;Qh(0);break}else{f=m+6148|0;Qh(c[f>>2]|0);f=c[f>>2]|0;if(c[f+8>>2]&4|0)break;d=c[e>>2]|0;if(c[d+8>>2]&4|0)break;i=m+6200|0;c[i>>2]=f;j=c[f+100>>2]|0;c[m+6204>>2]=j;_g(j,d);rf(h,m+204|0,(c[(c[i>>2]|0)+604>>2]|0)+20|0);i=c[h+4>>2]|0;j=m+6188|0;c[j>>2]=c[h>>2];c[j+4>>2]=i;break}}while(0);if(a[m+877>>0]|0){d=Th()|0;e=(d|0)==0;j=m+6088|0;f=c[j>>2]|0;a:do if(e|(f|0)<1)k=29;else{i=m+6148|0;while(1){h=f;f=f+-1|0;e=c[(bi(j,f)|0)>>2]|0;if((e|0)==(d|0))break a;e=(e|0)==(c[i>>2]|0);if(e|(h|0)<2){k=29;break}}}while(0);if((k|0)==29)if(e)d=c[m+6148>>2]|0;fi(d)}}while(0);f=m+6100|0;di(f,0);h=m+6088|0;Oi(f,c[h>>2]|0);if(!(c[h>>2]|0))d=0;else{d=0;do{e=c[(bi(h,d)|0)>>2]|0;if(!((a[e+140>>0]|0)!=0?(c[e+8>>2]&16777216|0)!=0:0))Pi(f,e);d=d+1|0}while((d|0)!=(c[h>>2]|0))}if((d|0)==(c[f>>2]|0)){Qi(h,f);g[m+220>>2]=0.0;d=m+742|0;e=d+34|0;do{b[d>>1]=0;d=d+2|0}while((d|0)<(e|0));c[n>>2]=c[o>>2];break}else Cb(6072,4833,2979,30229)}while(0);l=p;return}function Ni(){var a=0,b=0,d=0,e=0;a=c[244]|0;d=c[a+6140>>2]|0;if(c[d+416>>2]|0)zl();Li();e=d+8|0;if(!(c[e>>2]&16777216))Al();b=a+6112|0;Bl(b);if(c[e>>2]&67108864|0)Cl(a+6256|0);Ok(d,0);if(Kk(b)|0)a=0;else a=c[(Lk(b)|0)>>2]|0;Nk(a);return}function Oi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Pi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;Mk(b,g);d=c[g>>2]|0;do if(a[d+140>>0]|0){d=d+300|0;f=c[d>>2]|0;if((f|0)<=1)if((f|0)==1)d=0;else break;else{S7(Hl(d)|0,f,4,2);d=0}do{e=c[(bi((c[g>>2]|0)+300|0,d)|0)>>2]|0;if(a[e+140>>0]|0)Pi(b,e);d=d+1|0}while((d|0)!=(f|0))}while(0);l=h;return}function Qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Ri(){var b=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;u=l;l=l+64|0;h=u+56|0;i=u;j=u+48|0;k=u+40|0;m=u+32|0;n=u+24|0;o=u+16|0;p=u+8|0;t=c[244]|0;if(!(a[t>>0]|0))Cb(6027,4833,2992,30222);b=c[t+6080>>2]|0;d=t+6076|0;if((b|0)!=(c[d>>2]|0)){Mi();b=c[d>>2]|0}c[t+6084>>2]=b;if(+g[t+5092>>2]>0.0){c[t+796>>2]=0;q=t+792|0;c[q>>2]=0;r=t+788|0;c[r>>2]=0;b=0;do{Si(t+6372+(b*12|0)|0,0);b=b+1|0}while((b|0)!=3);d=t+6088|0;if(c[d>>2]|0){b=0;do{e=c[(bi(d,b)|0)>>2]|0;if((a[e+140>>0]|0?(c[e+184>>2]|0)<1:0)?(c[e+8>>2]&16777216|0)==0:0)Ti(e);b=b+1|0}while((b|0)!=(c[d>>2]|0))}f=t+6372|0;b=c[f>>2]|0;d=1;e=b;do{e=(c[t+6372+(d*12|0)>>2]|0)+e|0;d=d+1|0}while((d|0)!=3);Si(f,e);e=1;do{d=t+6372+(e*12|0)|0;if(!(Ui(d)|0)){w=Vi(f,b)|0;v=Vi(d,0)|0;Zaa(w|0,v|0,c[d>>2]<<2|0)|0;b=(c[d>>2]|0)+b|0}e=e+1|0}while((e|0)!=3);if(a[t+224>>0]|0){v=c[t+6528>>2]|0;rf(h,t+204|0,t+6532+(v*52|0)+4|0);d=t+6532+(v*52|0)+12|0;b=c[d+4>>2]|0;w=i;c[w>>2]=c[d>>2];c[w+4>>2]=b;c[j>>2]=c[c[t+128>>2]>>2];w=t+6412|0;lv(w,j);b=c[j>>2]|0;df(m,1.0,0.0);tf(k,h,m);df(p,1.0,0.0);tf(o,h,p);tf(n,o,i);d=t+6532+(v*52|0)+28|0;e=t+6532+(v*52|0)+44|0;ew(w,b,k,n,d,e,805306368);b=c[j>>2]|0;df(m,2.0,0.0);tf(k,h,m);df(p,2.0,0.0);tf(o,h,p);tf(n,o,i);ew(w,b,k,n,d,e,805306368);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,d,e,-16777216);p=c[j>>2]|0;tf(k,h,i);ew(w,p,h,k,t+6532+(v*52|0)+20|0,t+6532+(v*52|0)+36|0,-1);nv(w)}if(!(Wi(t+6436|0)|0))Xi(f,t+6412|0);d=t+6352|0;a[d>>0]=1;b=c[f>>2]|0;if((b|0)>0){e=Vi(f,0)|0;b=c[f>>2]|0}else e=0;c[t+6356>>2]=e;c[t+6360>>2]=b;c[t+6364>>2]=c[r>>2];c[t+6368>>2]=c[q>>2];if((b|0)>0?(s=c[t+172>>2]|0,s|0):0)je[s&127](d)}l=u;return}function Si(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Ls(a,Ms(a,b)|0);c[a>>2]=b;return}function Ti(a){a=a|0;var b=0,d=0;b=c[244]|0;d=b+796|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+8>>2]|0;do if(!(d&67108864))if(!(d&33554432)){Gs(b+6372|0,a);break}else{Gs(b+6396|0,a);break}else Gs(b+6384|0,a);while(0);return}function Ui(a){a=a|0;return (c[a>>2]|0)==0|0}function Vi(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b<<2)|0;else Cb(12740,37262,1030,12749);return 0}function Wi(a){a=a|0;return (c[a>>2]|0)==0|0}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+16|0;e=f;c[e>>2]=b;do if(!(Hs(b)|0)){d=Is(b)|0;if(((c[d>>2]|0)==0?(c[d+24>>2]|0)==0:0)?(Js(b),Hs(b)|0):0)break;d=c[b+24>>2]|0;if(d|0?(c[b+52>>2]|0)!=((c[b+32>>2]|0)+(d*20|0)|0):0)Cb(10965,4833,2836,11080);g=c[b+12>>2]|0;if(g|0?(c[b+56>>2]|0)!=((c[b+20>>2]|0)+(g<<1)|0):0)Cb(11104,4833,2837,11080);if((c[b+48>>2]|0)!=(d|0))Cb(11219,4833,2838,11080);if(d>>>0<65536){Ks(a,e);e=c[e>>2]|0;g=c[244]|0;d=g+788|0;c[d>>2]=(c[d>>2]|0)+(c[e+24>>2]|0);g=g+792|0;c[g>>2]=(c[g>>2]|0)+(c[e+12>>2]|0);break}else Cb(11279,4833,2849,11080)}while(0);l=f;return}function Yi(b,c){b=b|0;c=c|0;var d=0;d=(c|0)==0?-1:c;a:do if(d>>>0>b>>>0)while(1){switch(a[b>>0]|0){case 0:break a;case 35:{c=b+1|0;if((a[c>>0]|0)==35)break a;else b=c;break}default:b=b+1|0}if(b>>>0>=d>>>0)break a}while(0);return b|0}function Zi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=c[244]|0;if(a[f+10480>>0]|0){c[e>>2]=d;d=c[f+10484>>2]|0;if(!d)ng(c[f+10488>>2]|0,b,e);else v8(d,b,e)|0}l=g;return}function _i(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0;h=c[244]|0;i=c[h+6140>>2]|0;if(!f){if(!e)e=d+(c8(d)|0)|0}else e=Yi(d,e)|0;if((e-d|0)>0?(f=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(f,i,j,b,Rf(0,1.0)|0,d,e,0.0,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function $i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;n=o+16|0;m=o;f=c[244]|0;h=c[f+6140>>2]|0;if(!e)e=Yi(d,0)|0;if(!b)k=0;else{p=+g[b+4>>2];j=h+264|0;k=p>+g[j>>2]+1.0;g[j>>2]=p}f=f+10492|0;b=c[f>>2]|0;h=c[h+268>>2]|0;if((b|0)>(h|0)){c[f>>2]=h;b=h}j=h-b<<2;i=d;while(1){a:do if(i>>>0>>0){b=i;while(1){if((a[b>>0]|0)==10)break a;b=b+1|0;if(b>>>0>=e>>>0){b=0;break}}}else b=0;while(0);h=(b|0)==0;b=h?e:b;do if(!((b|0)==0|h&(b|0)==(i|0))){f=b-i|0;if(k|(i|0)!=(d|0)){c[m>>2]=j;c[m+4>>2]=58608;c[m+8>>2]=f;c[m+12>>2]=i;Zi(11395,m);break}else{c[n>>2]=f;c[n+4>>2]=d;Zi(11404,n);break}}while(0);if(h)break;else i=b+1|0}l=o;return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0.0,k=0;h=c[244]|0;i=c[h+6140>>2]|0;if(!e)e=d+(c8(d)|0)|0;if((e-d|0)>0?(k=c[i+596>>2]|0,i=c[h+5928>>2]|0,j=+g[h+5932>>2],Zv(k,i,j,b,Rf(0,1.0)|0,d,e,f,0),a[h+10480>>0]|0):0)$i(b,d,e);return}function bj(b,d,e,f,h,i,k){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+32|0;v=y+8|0;w=y;x=y+16|0;s=Yi(e,f)|0;if((s|0)!=(e|0)){t=c[244]|0;u=c[t+6140>>2]|0;q=b;f=c[q>>2]|0;q=c[q+4>>2]|0;r=v;c[r>>2]=f;c[r+4>>2]=q;if(!h){cj(w,e,s,0,0.0);p=w;q=v;m=+g[w>>2];n=+g[v>>2]}else{n=(c[j>>2]=f,+g[j>>2]);q=h;r=c[q>>2]|0;q=c[q+4>>2]|0;p=w;c[p>>2]=r;c[p+4>>2]=q;p=w;q=v;m=(c[j>>2]=r,+g[j>>2])}f=(k|0)!=0;r=f?k:b;b=f?k+8|0:d;o=+g[b>>2];if(!(n+m>=o))h=+g[v+4>>2]+ +g[w+4>>2]>=+g[b+4>>2];else h=1;if(f){if(+g[q>>2]<+g[r>>2])f=1;else f=+g[v+4>>2]<+g[r+4>>2]&1;f=(f|h&1|0)!=0}else f=h;m=+g[i>>2];if(m>0.0){n=+g[q>>2];g[q>>2]=+vg(n,n+m*(+g[d>>2]-n-+g[p>>2]))}m=+g[i+4>>2];if(m>0.0){i=v+4|0;n=+g[i>>2];g[i>>2]=+vg(n,n+m*(+g[d+4>>2]-n-+g[w+4>>2]))}if(f){Of(x,+g[r>>2],+g[r+4>>2],o,+g[b+4>>2]);d=c[u+596>>2]|0;w=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(d,w,o,v,Rf(0,1.0)|0,e,s,0.0,x)}else{w=c[u+596>>2]|0;x=c[t+5928>>2]|0;o=+g[t+5932>>2];Zv(w,x,o,v,Rf(0,1.0)|0,e,s,0.0,0)}if(a[t+10480>>0]|0)$i(v,e,s)}l=y;return}function cj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0;k=l;l=l+16|0;j=k;i=c[244]|0;if(e)d=Yi(b,d)|0;e=c[i+5928>>2]|0;h=+g[i+5932>>2];if((d|0)==(b|0))df(a,0.0,h);else{lz(j,e,h,3402823466385288598117041.0e14,f,b,d,0);f=+g[j>>2];if(f>0.0){f=f-h/+g[e>>2];g[j>>2]=f}g[j>>2]=+(~~(f+.949999988079071)|0);i=j;b=c[i+4>>2]|0;j=a;c[j>>2]=c[i>>2];c[j+4>>2]=b}l=k;return}function dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;o=l;l=l+32|0;j=o+24|0;k=o+16|0;m=o+8|0;n=o;p=c[244]|0;i=(c[p+6140>>2]|0)+596|0;Qv(c[i>>2]|0,a,b,d,f,15);h=+g[p+5156>>2];if(h>0.0&e){p=c[i>>2]|0;df(k,1.0,1.0);tf(j,a,k);df(n,1.0,1.0);tf(m,b,n);Pv(p,j,m,Rf(6,1.0)|0,f,15,h);p=c[i>>2]|0;Pv(p,a,b,Rf(5,1.0)|0,f,15,h)}l=o;return}function ej(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0;m=l;l=l+32|0;e=m+24|0;f=m+16|0;h=m+8|0;i=m;j=c[244]|0;k=+g[j+5156>>2];if(k>0.0){j=(c[j+6140>>2]|0)+596|0;n=c[j>>2]|0;df(f,1.0,1.0);tf(e,a,f);df(i,1.0,1.0);tf(h,b,i);Pv(n,e,h,Rf(6,1.0)|0,d,15,k);j=c[j>>2]|0;Pv(j,a,b,Rf(5,1.0)|0,d,15,k)}l=m;return}function fj(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;q=l;l=l+64|0;h=q+48|0;i=q+24|0;j=q+16|0;k=q+8|0;m=q;n=q+40|0;o=q+32|0;s=c[244]|0;f=c[s+6140>>2]|0;r=+g[s+5932>>2];e=r*.4000000059604645*d;r=r*.5;df(i,r,r*d);tf(h,a,i);bf(i);bf(j);bf(k);switch(b|0){case -1:case 4:{Cb(16777,4833,3285,6115);break}case 3:{p=3;break}case 2:{e=-e;p=3;break}case 0:{e=-e;p=5;break}case 1:{p=5;break}default:{}}if((p|0)==3){b=h+4|0;g[b>>2]=+g[b>>2]-e*.25;df(n,0.0,1.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.8659999966621399,-.5);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,.8659999966621399,-.5);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}else if((p|0)==5){g[h>>2]=+g[h>>2]-e*.25;df(n,1.0,0.0);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=i;c[s>>2]=c[b>>2];c[s+4>>2]=p;df(n,-.5,.8659999966621399);gf(m,n,e);s=m;p=c[s+4>>2]|0;b=j;c[b>>2]=c[s>>2];c[b+4>>2]=p;df(n,-.5,-.8659999966621399);gf(m,n,e);b=m;p=c[b+4>>2]|0;s=k;c[s>>2]=c[b>>2];c[s+4>>2]=p}s=c[f+596>>2]|0;tf(m,h,i);tf(n,h,j);tf(o,h,k);Vv(s,m,n,o,Rf(0,1.0)|0);l=q;return}function gj(a){a=a|0;var b=0.0,d=0,e=0;e=c[244]|0;d=c[(c[e+6140>>2]|0)+596>>2]|0;b=+g[e+5932>>2]*.20000000298023224;Xv(d,a,b,Rf(0,1.0)|0,8);return}function hj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0;e=l;l=l+16|0;h=e;i=c[(c[244]|0)+6140>>2]|0;f=+vg(d/5.0,1.0);j=d-f*.5;d=f*.25;df(h,d,d);Zh(a,h);d=j/3.0;k=d+ +g[a>>2];j=j+ +g[a+4>>2]-d*.5;a=i+596|0;i=c[a>>2]|0;df(h,k-d,j-d);ij(i,h);i=c[a>>2]|0;df(h,k,j);ij(i,h);i=c[a>>2]|0;d=d*2.0;df(h,d+k,j-d);ij(i,h);jj(c[a>>2]|0,b,0,f);l=e;return}function ij(a,b){a=a|0;b=b|0;Ns(a+84|0,b);return}function jj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;Av(a,c[a+92>>2]|0,c[a+84>>2]|0,b,d,e);Qs(a);return}function kj(a,b,c){a=a|0;b=b|0;c=c|0;return ((a|0)<(b|0)?b:(a|0)>(c|0)?c:a)|0}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=b;b=c[f+4>>2]|0;e=a;c[e>>2]=c[f>>2];c[e+4>>2]=b;e=d;b=c[e+4>>2]|0;d=a+8|0;c[d>>2]=c[e>>2];c[d+4>>2]=b;return}function mj(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>c)g[d>>2]=c;return}function nj(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[b>>2];if((c>=+g[a>>2]?(d=+g[b+4>>2],d>=+g[a+4>>2]):0)?c<+g[a+8>>2]:0)a=d<+g[a+12>>2];else a=0;return a|0}function oj(){return (c[(c[244]|0)+6148>>2]|0)!=0|0}function pj(){return (c[(c[244]|0)+6144>>2]|0)!=0|0}function qj(a){a=a|0;if(a>>>0<19)return c[(c[244]|0)+40+(a<<2)>>2]|0;else Cb(6130,4833,3433,33800);return 0}function rj(b){b=b|0;var d=0;do if((b|0)>=0)if((b|0)<512){d=(a[(c[244]|0)+229+b>>0]|0)!=0;break}else Cb(6175,4833,3441,33812);else d=0;while(0);return d|0}function sj(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0;if(!(a==0.0))if(a<=c|d<=0.0)e=0;else{e=~~((a-c)/d)-~~((b-c)/d)|0;e=(e|0)>0?e:0}else e=1;return e|0}function tj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0;f=c[244]|0;do if((a|0)>=0)if((a|0)<512){h=+g[f+996+(a<<2)>>2];e=sj(h,h-+g[f+12>>2],b,d)|0;break}else Cb(6281,4833,3459,33849);else e=0;while(0);return e|0}function uj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0.0;f=c[244]|0;if((a|0)>=0){if((a|0)>=512)Cb(6365,4833,3468,33822);h=+g[f+996+(a<<2)>>2];d=h==0.0;if(!(d|b^1)){e=+g[f+116>>2];if(h>e)d=(tj(a,e,+g[f+120>>2])|0)>0;else d=0}}else d=0;return d|0}function vj(b){b=b|0;var d=0;d=c[244]|0;do if((b|0)<0)b=0;else{if((b|0)>=512)Cb(6365,4833,3481,33835);if(+g[d+3044+(b<<2)>>2]>=0.0?(a[d+229+b>>0]|0)==0:0){b=1;break}b=0}while(0);return b|0}function wj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+212+b>>0]|0)!=0|0;else Cb(6459,4833,3490,33869);return 0}function xj(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0;if(a>>>0>=5)Cb(6459,4833,3497,33881);e=c[244]|0;d=+g[e+896+(a<<2)>>2];do if(d==0.0)a=1;else{if((b?(f=+g[e+116>>2],d>f):0)?(h=+g[e+120>>2],d=d-f,f=h*.5,b=+i9(d,h)>f,b^+i9(d-+g[e+12>>2],h)>f):0){a=1;break}a=0}while(0);return a|0}function yj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+886+b>>0]|0)!=0|0;else Cb(6459,4833,3515,33917);return 0}function zj(b){b=b|0;if(b>>>0<5)return (a[(c[244]|0)+881+b>>0]|0)!=0|0;else Cb(6459,4833,3522,33896);return 0}function Aj(b,d){b=b|0;d=+d;var e=0;if(b>>>0>=5)Cb(6459,4833,3529,33933);e=c[244]|0;if(!(a[e+212+b>>0]|0))b=0;else{if(d<0.0)d=+g[e+36>>2];b=+g[e+976+(b<<2)>>2]>=d*d}return b|0}function Bj(a){a=a|0;var b=0,d=0;d=(c[244]|0)+204|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Cj(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6256>>2]|0;if((d|0)>0)b=(Dj(b+6244|0,d+-1|0)|0)+16|0;else b=b+204|0;d=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=d;return}function Dj(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*24|0)|0;else Cb(12740,37262,1030,12749);return 0}function Ej(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=c[244]|0;if(d>>>0>=5)Cb(6459,4833,3563,34030);if(e<0.0)e=+g[f+36>>2];if((a[f+212+d>>0]|0)!=0?+g[f+976+(d<<2)>>2]>=e*e:0)rf(b,f+204|0,f+816+(d<<3)|0);else df(b,0.0,0.0);return}function Fj(a){a=a|0;var b=0,d=0,e=0;if(a>>>0<5){e=c[244]|0;d=e+204|0;b=c[d+4>>2]|0;a=e+816+(a<<3)|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}else Cb(6459,4833,3575,34048)}function Gj(){return c[(c[244]|0)+6528>>2]|0}function Hj(a){a=a|0;c[(c[244]|0)+6528>>2]=a;return}function Ij(a){a=a|0;c[(c[244]|0)+10992>>2]=a&1;return}function Jj(a){a=a|0;c[(c[244]|0)+10988>>2]=a&1;return}function Kj(){var a=0,b=0;a=c[244]|0;b=c[a+6172>>2]|0;if(!b)a=0;else a=(b|0)==(c[(c[a+6140>>2]|0)+272>>2]|0);return a|0}function Lj(a){a=a|0;if(xj(a,0)|0)a=ih(0)|0;else a=0;return a|0}function Mj(){var a=0;a=c[244]|0;if(!(c[a+6156>>2]|0))a=(c[a+6164>>2]|0)!=0;else a=1;return a|0}function Nj(){return (c[(c[244]|0)+6172>>2]|0)!=0|0}function Oj(){var a=0;a=Cg()|0;return lh(a+432|0,a+276|0)|0}function Pj(){var b=0,d=0;b=c[244]|0;d=c[(c[b+6140>>2]|0)+272>>2]|0;if((c[b+6156>>2]|0)==(d|0))a[b+6160>>0]=1;if((c[b+6172>>2]|0)==(d|0))a[b+6186>>0]=1;return}function Qj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+276|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Rj(a){a=a|0;var b=0,d=0;d=(Cg()|0)+284|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Sj(a){a=a|0;eh(a,(Cg()|0)+276|0);return}function Tj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+24|0;h=f+8|0;i=f;k=(Cg()|0)+276|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];c[h+12>>2]=c[k+12>>2];Uj(h,e);k=b;j=c[k+4>>2]|0;b=i;c[b>>2]=c[k>>2];c[b+4>>2]=j;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];Vj(a,h,g,d);l=f;return}function Uj(a,b){a=a|0;b=+b;var c=0;g[a>>2]=+g[a>>2]-b;c=a+4|0;g[c>>2]=+g[c>>2]-b;c=a+8|0;g[c>>2]=+g[c>>2]+b;a=a+12|0;g[a>>2]=+g[a>>2]+b;return}function Vj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;if(!(!e?nj(b,d)|0:0))h=3;do if((h|0)==3){f=+g[d>>2];i=b+8|0;if(!(f>+g[i>>2])){if(f<+g[b>>2]){e=b;h=6}}else{e=i;h=6}if((h|0)==6)c[d>>2]=c[e>>2];e=d+4|0;f=+g[e>>2];if(f>+g[b+12>>2])b=i;else if(!(f<+g[b+4>>2]))break;c[e>>2]=c[b+4>>2]}while(0);h=d;i=c[h+4>>2]|0;d=a;c[d>>2]=c[h>>2];c[d+4>>2]=i;return}function Wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;h=i+8|0;j=i;e=i+16|0;f=(c[244]|0)+10420|0;c[j>>2]=c[f>>2];Ef(e,16,6539,j)|0;if((d?(g=Xj(e)|0,g|0):0)?a[g+140>>0]|0:0){c[g+184>>2]=1;j=(c[f>>2]|0)+1|0;c[f>>2]=j;c[h>>2]=j;Ef(e,16,6539,h)|0}hi(e,0,b|33554759)|0;l=i;return}function Xj(a){a=a|0;var b=0;b=c[244]|0;return cg(b+6124|0,Gf(a,0,0)|0)|0}function Yj(a,b){a=a|0;b=b|0;Wj(0,1);Zj(a,b);_j();return}function Zj(b,d){b=b|0;d=d|0;var e=0,f=0;if(!(a[(Ii()|0)+144>>0]|0)){e=c[244]|0;f=e+11e3|0;on(f,(Ff(f,3073,b,d)|0)+(e+11e3)|0)}return}function _j(){if(!(c[(Cg()|0)+8>>2]&33554432))Cb(6554,4833,3717,32749);else{Ni();return}}function $j(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Yj(a,e);l=d;return}function ak(){Wj(0,0);return}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;f=i;d=c[244]|0;g=c[d+6140>>2]|0;h=c[d+6256>>2]|0;ck(f,a,g,Kg(g,6611,0)|0,d+204|0);d=d+6244|0;e=h+1|0;do if((c[d>>2]|0)>(h|0)){if(!b?(c[(Dj(d,h)|0)>>2]|0)==(a|0):0)break;ei(d,e);e=Dj(d,h)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];if((c[(Dj(d,h)|0)>>2]|0)==(a|0))Qh(g)}else dk(d,f);while(0);l=i;return}function ck(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=a+16|0;bf(g);c[a>>2]=b;c[a+4>>2]=0;c[a+8>>2]=d;c[a+12>>2]=e;d=f;e=c[d+4>>2]|0;f=g;c[f>>2]=c[d>>2];c[f+4>>2]=e;return}function dk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){hu(a,iu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*24|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];return}function ek(a){a=a|0;bk(Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0,0);return}function fk(a){a=a|0;if(gk(a)|0)hk((c[(c[244]|0)+6244>>2]|0)+-1|0);return}function gk(a){a=a|0;var b=0,d=0;d=c[244]|0;b=d+6244|0;d=c[d+6256>>2]|0;if((c[b>>2]|0)>(d|0))a=(c[(Dj(b,d)|0)>>2]|0)==(a|0);else a=0;return a|0}function hk(a){a=a|0;var b=0;b=(c[244]|0)+6244|0;if((a|0)>0)Qh(c[(Dj(b,a+-1|0)|0)+4>>2]|0);else Qh(c[(Dj(b,0)|0)+8>>2]|0);ei(b,a);return}function ik(){var a=0,b=0,d=0,e=0,f=0;b=c[244]|0;d=b+6256|0;e=c[d>>2]|0;a=e+-1|0;if(((e|0)>=1?(f=b+6244|0,(e|0)<=(c[f>>2]|0)):0)?(d=c[(Dj(d,a)|0)>>2]|0,(d|0)==(c[(Dj(f,a)|0)>>2]|0)):0){a:do if((e|0)>1)while(1){if(!(c[(Dj(f,a)|0)+4>>2]|0))break a;if(!(c[(c[(Dj(f,a)|0)+4>>2]|0)+8>>2]&268435456))break a;b=a+-1|0;if((a|0)>1)a=b;else{a=b;break}}while(0);hk(a)}return}function jk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=l;l=l+32|0;g=h+8|0;f=h;d=h+12|0;e=c[244]|0;if(gk(a)|0){if(!(b&268435456)){c[g>>2]=a;Ef(d,20,6631,g)|0}else{c[f>>2]=c[e+6256>>2];Ef(d,20,6619,f)|0}a=hi(d,0,b|67108864)|0;if(!a)lk()}else{kk();a=0}l=h;return a|0}function kk(){var b=0,d=0;d=c[244]|0;b=d+6304|0;a[d+6345>>0]=0;a[d+6344>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function lk(){var a=0;a=c[244]|0;if(!(c[(c[a+6140>>2]|0)+8>>2]&67108864))Cb(6644,4833,3907,32969);if((c[a+6256>>2]|0)>0){Ni();return}else Cb(6692,4833,3908,32969)}function mk(a){a=a|0;var b=0;b=c[244]|0;if((c[b+6244>>2]|0)>(c[b+6256>>2]|0))a=jk(Kg(c[b+6140>>2]|0,a,0)|0,321)|0;else{kk();a=0}return a|0}function nk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+6244|0;e=c[b+6256>>2]|0;if((c[d>>2]|0)>(e|0)){e=c[(Dj(d,e)|0)>>2]|0;a=(e|0)==(Kg(c[b+6140>>2]|0,a,0)|0)}else a=0;return a|0}function ok(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=l;l=l+16|0;f=k+8|0;g=k;h=c[244]|0;i=c[h+6140>>2]|0;j=Kg(i,b,0)|0;do if(gk(j)|0){if(!(c[h+6304>>2]&c[i+188>>2])){gf(f,h+4|0,.5);df(g,.5,.5);pk(f,8,g)}if(!(hi(b,d,e|201326880)|0)){lk();b=0;break}if((d|0)!=0?(a[d>>0]|0)==0:0){lk();fk(j);b=0}else b=1}else{kk();b=0}while(0);l=k;return b|0}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;g=a;a=c[g+4>>2]|0;f=e+6268|0;c[f>>2]=c[g>>2];c[f+4>>2]=a;f=d;a=c[f+4>>2]|0;d=e+6276|0;c[d>>2]=c[f>>2];c[d+4>>2]=a;c[e+6304>>2]=b|0?b:1;return}function qk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[244]|0)+6140>>2]|0;do if(xj(b,0)|0?ih(4)|0:0){if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3918,32853);else{bk(a,1);e=1;break}}else e=0;while(0);return e|0}function rk(a,b){a=a|0;b=b|0;var d=0;d=c[(c[244]|0)+6140>>2]|0;if(!a)a=c[d+272>>2]|0;else a=Kg(d,a,0)|0;if(!a)Cb(6721,4833,3932,32901);if(xj(b,0)|0?ih(4)|0:0)bk(a,1);return jk(a,321)|0}function sk(a,b,d){a=a|0;b=b|0;d=d|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6729:a,0)|0;do if(xj(b,0)|0?tk(4)|0:0){if(!d?Mj()|0:0)break;bk(a,1)}while(0);return jk(a,321)|0}function tk(b){b=b|0;var d=0,e=0,f=0,g=0;if(b&32|0)Cb(7637,4833,5505,33476);e=c[244]|0;switch(b&3){case 3:{if((c[e+6152>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 2:{if((c[e+6148>>2]|0)==(c[(c[e+6140>>2]|0)+604>>2]|0))g=9;else b=0;break}case 1:{d=c[e+6148>>2]|0;if((d|0)!=0?Uh(d,c[e+6140>>2]|0)|0:0)g=9;else b=0;break}default:if((c[e+6148>>2]|0)==(c[e+6140>>2]|0))g=9;else b=0}do if((g|0)==9)if(jh(c[e+6152>>2]|0,b)|0){if((((b&16|0)==0?(f=c[e+6172>>2]|0,f|0):0)?(a[e+6186>>0]|0)==0:0)?(f|0)!=(c[(c[e+6148>>2]|0)+100>>2]|0):0){b=0;break}b=1}else b=0;while(0);return b|0}function uk(a,b){a=a|0;b=b|0;a=Kg(c[(c[244]|0)+6140>>2]|0,(a|0)==0?6744:a,0)|0;if(!(oj()|0)?xj(b,0)|0:0)bk(a,1);return jk(a,321)|0}function vk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(a,Kg(Ii()|0,a,0)|0,b,c,d)|0}function wk(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+304|0;r=s+16|0;q=s;h=s+32|0;o=s+24|0;p=s+40|0;i=c[244]|0;m=Ii()|0;n=c[m+8>>2]&4;Ol(h);ff(o,d);j=+g[o>>2];d=o+4|0;k=+g[d>>2];if(j<=0.0)g[o>>2]=+vg(j+ +g[h>>2],4.0);if(k<=0.0)g[d>>2]=+vg(k+ +g[h+4>>2],4.0);h=i+5132|0;i=c[h>>2]|0;if(!e)g[h>>2]=0.0;d=c[m>>2]|0;if(!a){c[r>>2]=d;c[r+4>>2]=b;Ef(p,256,11493,r)|0}else{c[q>>2]=d;c[q+4>>2]=a;c[q+8>>2]=b;Ef(p,256,11482,q)|0}gi(o,0);r=hi(p,0,n|f|16777475)|0;c[(Ii()|0)+176>>2]=(k==0.0?2:0)|j==0.0;c[h>>2]=i;l=s;return r|0}function xk(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wk(0,a,b,c,d)|0}function yk(){var a=0,b=0,d=0,e=0,f=0;f=l;l=l+32|0;b=f+24|0;d=f+8|0;e=f;a=Ii()|0;if(!(c[a+8>>2]&16777216))Cb(6757,4833,4011,30366);if((c[a+156>>2]|0)>1)Ni();else{zk(b);a=c[a+176>>2]|0;if(a&1|0)g[b>>2]=+vg(4.0,+g[b>>2]);if(a&2|0){a=b+4|0;g[a>>2]=+vg(4.0,+g[a>>2])}Ni();a=(Ii()|0)+216|0;tf(e,a,b);lj(d,a,e);bh(b,0.0);fh(d,0)|0}l=f;return}function zk(a){a=a|0;var b=0,d=0;d=(Cg()|0)+28|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[244]|0;Bk(3,e+5352|0);Ck(5,+g[e+5152>>2]);Ck(6,+g[e+5156>>2]);Dk(1,e+5144|0);return xk(a,b,1,d|65540)|0}function Bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d;f=c[244]|0;em(e);c[e>>2]=a;a=f+5240+(a<<4)|0;g=e+4|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];c[g+12>>2]=c[a+12>>2];fm(f+6208|0,e);c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];l=d;return}function Ck(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0;f=l;l=l+16|0;d=f;e=im(a)|0;if((c[e>>2]|0)==1){h=c[244]|0;e=jm(e,h+5092|0)|0;lm(d,a,+g[e>>2]);km(h+6220|0,d);g[e>>2]=b;l=f;return}else Cb(16777,4833,5405,31106)}function Dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;g=h+24|0;d=h+8|0;e=h;f=im(a)|0;if((c[f>>2]|0)==2){j=c[244]|0;i=jm(f,j+5092|0)|0;m=i;k=c[m+4>>2]|0;f=e;c[f>>2]=c[m>>2];c[f+4>>2]=k;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];mm(d,a,g);km(j+6220|0,d);e=b;f=c[e+4>>2]|0;g=i;c[g>>2]=c[e>>2];c[g+4>>2]=f;l=h;return}else Cb(16777,4833,5419,31106)}function Ek(){yk();Fk(3);Gk(1);return}function Fk(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i;b=c[244]|0;a:do if((a|0)>0){h=b+6220|0;e=b+5092|0;while(1){b=nm(h)|0;d=im(c[b>>2]|0)|0;switch(c[d>>2]|0){case 1:{b=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=b;break}case 2:{df(f,+g[b+4>>2],+g[b+8>>2]);d=jm(d,e)|0;j=f;b=c[j+4>>2]|0;c[d>>2]=c[j>>2];c[d+4>>2]=b;break}case 0:{j=c[b+4>>2]|0;c[(jm(d,e)|0)>>2]=j;break}default:{}}om(h);if((a|0)>1)a=a+-1|0;else break a}}while(0);l=i;return}function Gk(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[244]|0;if((a|0)>0){d=b+6208|0;while(1){e=gm(d)|0;f=e+4|0;e=b+5240+(c[e>>2]<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];hm(d);if((a|0)>1)a=a+-1|0;else break}}return}function Hk(){df(57824,1.0,1.0);df(57832,-1.0,-1.0);c[14460]=0;c[14461]=3;df(57848,0.0,1.0);df(57856,1.0,-1.0);c[14466]=3;c[14467]=6;df(57872,0.0,0.0);df(57880,1.0,1.0);c[14472]=6;c[14473]=9;df(57896,1.0,0.0);df(57904,-1.0,1.0);c[14478]=9;c[14479]=12;return}function Ik(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;m=l;l=l+16|0;h=m;k=m+8|0;i=c[244]|0;f=Bf(636)|0;a[h>>0]=a[m+12>>0]|0;f=Lg(636,h,f)|0;Dg(f,i,b);c[k>>2]=f;c[f+8>>2]=e;ig(i+6124|0,c[f+4>>2]|0,f);if(!(e&256)){df(h,60.0,60.0);b=h;o=c[b>>2]|0;b=c[b+4>>2]|0;n=(c[k>>2]|0)+12|0;c[n>>2]=o;c[n+4>>2]=b;p=+(~~(c[j>>2]=o,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=b,+g[j>>2])|0));b=c[k>>2]|0;o=h;n=c[o+4>>2]|0;f=b+20|0;c[f>>2]=c[o>>2];c[f+4>>2]=n;b=Ei(c[b+4>>2]|0)|0;f=c[k>>2]|0;if(b){Jk(f,4,0);f=b+8|0;n=c[f>>2]|0;f=c[f+4>>2]|0;o=(c[k>>2]|0)+12|0;c[o>>2]=n;c[o+4>>2]=f;p=+(~~(c[j>>2]=n,+g[j>>2])|0);df(h,p,+(~~(c[j>>2]=f,+g[j>>2])|0));f=c[k>>2]|0;n=c[h+4>>2]|0;o=f+20|0;c[o>>2]=c[h>>2];c[o+4>>2]=n;a[f+143>>0]=a[b+24>>0]|0;b=b+16|0;if(+xf(b)>9.999999747378752e-06){h=b;n=c[h+4>>2]|0;o=d;c[o>>2]=c[h>>2];c[o+4>>2]=n}}}n=d;d=c[n>>2]|0;n=c[n+4>>2]|0;o=f+44|0;c[o>>2]=d;c[o+4>>2]=n;o=f+36|0;c[o>>2]=d;c[o+4>>2]=n;o=f+28|0;c[o>>2]=d;c[o+4>>2]=n;if(!(e&64)){if(+g[f+28>>2]<=0.0)c[f+164>>2]=2;if(+g[f+32>>2]<=0.0)c[f+168>>2]=2;if((c[f+164>>2]|0)>0)b=1;else b=(c[f+168>>2]|0)>0&1}else{c[f+168>>2]=2;c[f+164>>2]=2;b=0}a[f+172>>0]=b;b=i+6088|0;if(!(e&8192))Mk(b,k);else Ss(b,Hl(b)|0,k)|0;l=m;return c[k>>2]|0}function Jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=a+188|0;g=c[f>>2]|0;e=~b;c[f>>2]=d?g|b:g&e;f=a+192|0;g=c[f>>2]|0;c[f>>2]=d?g|b:g&e;a=a+196|0;f=c[a>>2]|0;c[a>>2]=d?f|b:f&e;return}function Kk(a){a=a|0;return (c[a>>2]|0)==0|0}function Lk(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Mk(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Nk(a){a=a|0;var b=0,d=0.0;b=c[244]|0;c[b+6140>>2]=a;if(a|0){d=+_h(a);g[b+5952>>2]=d;g[b+5932>>2]=d}return}function Ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=a+380|0;f=c[a+420>>2]|0;if(!b){if((c[e>>2]|0)!=(f|0))Cb(11538,4833,4058,11607);if((c[a+384>>2]|0)!=(c[a+368>>2]|0))Cb(11623,4833,4059,11607);if((c[a+388>>2]|0)!=(c[d+6256>>2]|0))Cb(11679,4833,4060,11607);if((c[a+392>>2]|0)!=(c[d+6208>>2]|0))Cb(11755,4833,4061,11607);if((c[a+396>>2]|0)!=(c[d+6220>>2]|0))Cb(11820,4833,4062,11607);if((c[a+400>>2]|0)!=(c[d+6232>>2]|0))Cb(11881,4833,4063,11607)}else{c[e>>2]=f;c[a+384>>2]=c[a+368>>2];c[a+388>>2]=c[d+6256>>2];c[a+392>>2]=c[d+6208>>2];c[a+396>>2]=c[d+6220>>2];c[a+400>>2]=c[d+6232>>2]}return}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0;k=l;l=l+16|0;h=k+8|0;i=k;e=a+188|0;f=c[e>>2]|0;if(!((d|0)!=0&(f&d|0)==0)){c[e>>2]=f&-15;df(h,3402823466385288598117041.0e14,3402823466385288598117041.0e14);f=h;n=c[f+4>>2]|0;d=a+200|0;c[d>>2]=c[f>>2];c[d+4>>2]=n;d=a+20|0;n=d;f=c[n+4>>2]|0;e=h;c[e>>2]=c[n>>2];c[e+4>>2]=f;e=b;f=c[e>>2]|0;e=c[e+4>>2]|0;b=a+12|0;c[b>>2]=f;c[b+4>>2]=e;m=+(~~(c[j>>2]=f,+g[j>>2])|0);df(i,m,+(~~(c[j>>2]=e,+g[j>>2])|0));e=i;f=c[e+4>>2]|0;b=d;c[b>>2]=c[e>>2];c[b+4>>2]=f;rf(i,d,h);Zh(a+216|0,i);rf(i,d,h);Zh(a+240|0,i)}l=k;return}function Qk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0;h=b+192|0;i=c[h>>2]|0;do if(!((e|0)!=0&(i&e|0)==0)){c[h>>2]=i&-15;f=+g[d>>2];h=b+164|0;if(f>0.0){c[h>>2]=0;g[b+36>>2]=f}else{c[h>>2]=2;a[b+172>>0]=0}f=+g[d+4>>2];h=b+168|0;if(f>0.0){c[h>>2]=0;g[b+40>>2]=f;break}else{c[h>>2]=2;a[b+172>>0]=0;break}}while(0);return}function Rk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1)){b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}else b=0.0;return +b}function Sk(a){a=a|0;var b=0.0;if(!(c[a+8>>2]&1024))b=0.0;else{b=+_h(a);b=b+ +g[(c[244]|0)+5148>>2]*2.0}return +b}function Tk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+196|0;g=c[f>>2]|0;if(!((e|0)!=0&(g&e|0)==0)){c[f>>2]=g&-15;a[b+143>>0]=d&1}return}function Uk(){Qh(c[(c[244]|0)+6140>>2]|0);return}function Vk(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))fu(a,gu(a,b)|0);c[a>>2]=b;return}function Wk(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;d=b+152|0;e=b+160|0;if(+g[d>>2]!=+g[e>>2]?+g[b+156>>2]!=+g[b+164>>2]:0)lj(a,d,e);else al(a,0.0,0.0,+g[b+4>>2],+g[b+8>>2]);return}function Xk(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0;c=l;l=l+16|0;d=c;e=b+20|0;h=+g[e>>2]+ +g[b+36>>2];f=+g[b+24>>2];df(d,h,f+ +Rk(b));lj(a,e,d);l=c;return}function Yk(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;e=l;l=l+16|0;d=e;bf(d);c=+g[b+60>>2];if(!(c!=0.0))c=+g[b+240>>2]-+g[b+20>>2]+ +g[b+104>>2];g[d>>2]=+(~~c|0);c=+g[b+64>>2];if(!(c!=0.0))c=+g[b+244>>2]-+g[b+24>>2]+ +g[b+108>>2];g[d+4>>2]=+(~~c|0);tf(a,d,b+84|0);l=e;return}function Zk(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,m=0,n=0,o=0;n=l;l=l+48|0;i=n+32|0;j=n+8|0;e=n+24|0;f=n+16|0;h=n;k=c[244]|0;m=c[b+8>>2]|0;bf(a);if(!(m&33554432)){o=k+5112|0;rf(f,k+4|0,k+5224|0);$k(e,o,f);c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];Us(j,d,o,i);e=j;o=c[e>>2]|0;e=c[e+4>>2]|0;f=a;c[f>>2]=o;c[f+4>>2]=e;f=h;c[f>>2]=o;c[f+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];_k(j,b,i);b=(m&8|0)==0;if(!((m&2048|0)==0|b&+g[j>>2]<+g[d>>2]^1)){o=a+4|0;g[o>>2]=+g[k+5192>>2]+ +g[o>>2]}if(b&+g[j+4>>2]<+g[d+4>>2])g[a>>2]=+g[k+5192>>2]+ +g[a>>2]}else{k=d;m=c[k+4>>2]|0;o=a;c[o>>2]=c[k>>2];c[o+4>>2]=m}l=n;return}function _k(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+32|0;n=p;o=c[244]|0;if(a[o+6344>>0]|0){h=+g[o+6320>>2];k=+g[o+6324>>2];i=+g[o+6328>>2];m=+g[o+6332>>2];if(!(h>=0.0)|!(i>=0.0)){f=e;h=+g[d+36>>2]}else{f=e;h=+Wh(+g[e>>2],h,i)}g[f>>2]=h;if(!(k>=0.0)|!(m>=0.0)){f=e+4|0;h=+g[d+40>>2]}else{q=e+4|0;f=q;h=+Wh(+g[q>>2],k,m)}g[f>>2]=h;f=o+6336|0;if(c[f>>2]|0){Vs(n);c[n>>2]=c[o+6340>>2];r=d+20|0;t=c[r+4>>2]|0;s=n+4|0;c[s>>2]=c[r>>2];c[s+4>>2]=t;s=d+36|0;t=c[s+4>>2]|0;r=n+12|0;c[r>>2]=c[s>>2];c[r+4>>2]=t;r=n+20|0;t=e;s=c[t+4>>2]|0;q=r;c[q>>2]=c[t>>2];c[q+4>>2]=s;je[c[f>>2]&127](n);f=c[r+4>>2]|0;q=e;c[q>>2]=c[r>>2];c[q+4>>2]=f}}if(!(c[d+8>>2]&16777280)){$k(n,e,o+5112|0);r=n;t=c[r+4>>2]|0;s=e;c[s>>2]=c[r>>2];c[s+4>>2]=t;k=(c[j>>2]=t,+g[j>>2]);m=+Rk(d);m=m+ +Sk(d);g[e+4>>2]=+vg(k,m+ +vg(0.0,+g[o+5104>>2]+-1.0))}r=e;s=c[r+4>>2]|0;t=b;c[t>>2]=c[r>>2];c[t+4>>2]=s;l=p;return}function $k(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+vg(+g[b>>2],+g[c>>2]);df(a,d,+vg(+g[b+4>>2],+g[c+4>>2]));return}function al(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;df(a,b,c);df(a+8|0,d,e);return}function bl(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,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,D=0,E=0;A=l;l=l+64|0;p=A;u=A+40|0;z=A+24|0;o=A+32|0;q=A+16|0;n=c[244]|0;i=+g[n+5224>>2];j=+g[n+5228>>2];Wk(u);B=+g[d>>2];n=B-+Dl(u)>i*2.0;y=d+4|0;B=+g[y>>2];t=B-+$h(u)>j*2.0;df(p,n?-i:0.0,t?-j:0.0);El(u,p);t=u+8|0;rf(o,t,d);c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];Us(z,b,u,p);a:do if((h|0)==1){k=f+12|0;m=f+4|0;n=f+8|0;h=((c[e>>2]|0)!=-1)<<31>>31;while(1){C=(h|0)==-1;o=c[(C?e:1120+(h<<2)|0)>>2]|0;if(!(!C?(o|0)==(c[e>>2]|0):0)){bf(a);switch(o|0){case 3:{df(p,+g[f>>2],+g[k>>2]);E=p;D=c[E+4>>2]|0;C=a;c[C>>2]=c[E>>2];c[C+4>>2]=D;break}case 1:{df(p,+g[f>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 0:{df(p,+g[n>>2]-+g[d>>2],+g[k>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}case 2:{df(p,+g[n>>2]-+g[d>>2],+g[m>>2]-+g[y>>2]);C=p;D=c[C+4>>2]|0;E=a;c[E>>2]=c[C>>2];c[E+4>>2]=D;break}default:{}}tf(q,a,d);lj(p,a,q);if(rr(u,p)|0)break}if((h|0)<3)h=h+1|0;else{v=13;break a}}c[e>>2]=o}else v=13;while(0);do if((v|0)==13){k=c[e>>2]|0;m=f+8|0;i=+g[d>>2];j=+g[y>>2];h=((k|0)!=-1)<<31>>31;while(1){E=(h|0)==-1;n=c[(E?e:1136+(h<<2)|0)>>2]|0;if((!((n|0)==(k|0)&(E^1))?(r=(n|0)==0,s=(n|0)==1,w=(n|0)==2,x=(n|0)==3,!(+g[(r?f:t)>>2]-+g[(s?m:u)>>2]>2]-+g[(x?m:u)+4>>2]>2]=-1;B=+g[b+4>>2];i=+yf(+g[b>>2]+i,+g[t>>2])-i;i=+vg(i,+g[u>>2]);B=+yf(B+j,+g[u+12>>2])-j;B=+vg(B,+g[u+4>>2]);g[a>>2]=i;g[a+4>>2]=B;break}bf(a);if(r)i=+g[f>>2]-+g[d>>2];else i=+g[(s?m:z)>>2];g[a>>2]=i;if(w)i=+g[f+4>>2]-+g[y>>2];else i=+g[(x?m:z)+4>>2];g[a+4>>2]=i;c[e>>2]=n}while(0);l=A;return}function cl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;d=+yf(+g[b>>2],+g[c>>2]);df(a,d,+yf(+g[b+4>>2],+g[c+4>>2]));return}function dl(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0,n=0,o=0,p=0.0;k=l;l=l+16|0;h=k;i=k+8|0;o=d+104|0;n=c[o+4>>2]|0;m=b;c[m>>2]=c[o>>2];c[m+4>>2]=n;f=+g[d+124>>2];e=+g[d+112>>2];if(e<3402823466385288598117041.0e14)g[b>>2]=e-+g[d+120>>2]*(+g[d+36>>2]-+g[d+132>>2]);e=+g[d+116>>2];if(e<3402823466385288598117041.0e14){p=+Rk(d);e=e-(1.0-f)*(p+ +Sk(d));g[b+4>>2]=e-f*(+g[d+40>>2]-+g[d+136>>2])}df(i,0.0,0.0);$k(h,b,i);o=h;n=c[o>>2]|0;o=c[o+4>>2]|0;m=b;c[m>>2]=n;c[m+4>>2]=o;e=(c[j>>2]=n,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);if((a[d+143>>0]|0)==0?(a[d+144>>0]|0)==0:0){g[b>>2]=+yf(e,+en(d));g[b+4>>2]=+yf(f,+gn(d))}l=k;return}function el(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Kg(e,a,0)|0;Jg(e+420|0,d);l=b;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*+g[d>>2],e+(+g[c+4>>2]-e)*+g[d+4>>2]);return}function gl(a){a=a|0;var b=0,c=0;b=a+8|0;if(+g[a>>2]>+g[b>>2])Wf(a,b);c=a+4|0;b=a+12|0;if(+g[c>>2]>+g[b>>2])Wf(c,b);return}function hl(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;n=s;r=c[244]|0;o=Ii()|0;if(!(h&256)){q=(h&30|0)==0?h|2:h;j=r+6148|0;k=c[j>>2]|0;m=(q&32|0)!=0;if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=o;h=kh(b,d)|0;if((((q&4096|0)!=0?(a[r+6896>>0]|0)!=0:0)?(c[r+6900>>2]&4|0)==0:0)?ih(16)|0:0){ah(d);t=+g[r+6168>>2]+9.999999747378752e-05;if(!(sj(t,t-+g[r+12>>2],.009999999776482582,.699999988079071)|0)){i=1;h=0}else{Qh(o);i=1;h=1}}else{i=h;h=0}if(m?(c[r+6152>>2]|0)==(o|0):0)c[j>>2]=k;if((q&64|0)==0|i^1)if(i)p=23;else j=0;else{m=c[r+6164>>2]|0;if(i&((m|0)==(d|0)|(m|0)==0))p=23;else j=0}do if((p|0)==23){if(q&1024|0){if(a[r+225>>0]|0){j=1;break}if(a[r+226>>0]|0){j=1;break}if(a[r+227>>0]|0){j=1;break}}if(q&2|0?a[r+876>>0]|0:0){_g(d,o);Qh(o);rf(n,r+204|0,b);j=n;k=c[j+4>>2]|0;m=r+6188|0;c[m>>2]=c[j>>2];c[m+4>>2]=k}if((q&4|0)!=0?(a[r+876>>0]|0)!=0:0)p=34;else if((q&16|0)!=0?(a[r+881>>0]|0)!=0:0)p=34;if((p|0)==34){if(!(q&2048)){_g(d,o);rf(n,r+204|0,b);b=n;n=c[b+4>>2]|0;p=r+6188|0;c[p>>2]=c[b>>2];c[p+4>>2]=n}else $g();Qh(o);h=1}if((q&8|0)!=0?(a[r+886>>0]|0)!=0:0){if(!((q&1|0)!=0?+g[r+916>>2]>=+g[r+116>>2]:0))h=1;$g()}if(((q&1|0)!=0?(c[r+6172>>2]|0)==(d|0):0)?+g[r+896>>2]>0.0:0){j=1;h=h|(xj(0,1)|0)}else j=1}while(0);if((c[r+6172>>2]|0)==(d|0))if(!(a[r+212>>0]|0)){do if(!((q&2|0)==0|j^1)){if(q&1|0?+g[r+916>>2]>=+g[r+116>>2]:0)break;h=h|(a[r+6896>>0]|0)==0}while(0);$g();i=0}else i=1;else i=0;if(e|0)a[e>>0]=j&1;if(f)a[f>>0]=i}else{if(e|0)a[e>>0]=0;if(f|0)a[f>>0]=0;if((c[r+6172>>2]|0)==(d|0)){$g();h=0}else h=0}l=s;return h|0}function il(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+48|0;o=m+40|0;n=m+24|0;r=m+32|0;i=m+16|0;k=m;p=m+8|0;q=a+20|0;fl(n,b,q,d);tf(o,q,a+28|0);fl(r,o,b,d);rf(i,r,n);r=i;q=c[r+4>>2]|0;b=p;c[b>>2]=c[r>>2];c[b+4>>2]=q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_k(k,a,o);b=n;a=c[b>>2]|0;b=c[b+4>>2]|0;n=e;c[n>>2]=a;c[n+4>>2]=b;h=(c[j>>2]=b,+g[j>>2]);if(+g[d>>2]==0.0)g[e>>2]=(c[j>>2]=a,+g[j>>2])-(+g[k>>2]-+g[i>>2]);if(+g[d+4>>2]==0.0)g[e+4>>2]=h-(+g[k+4>>2]-+g[i+4>>2]);p=k;q=c[p+4>>2]|0;r=f;c[r>>2]=c[p>>2];c[r+4>>2]=q;l=m;return}function jl(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0;i=l;l=l+32|0;f=i+8|0;h=i;nl(f,b);if(e==0.0){df(h,1.0,1.0);Ws(f+8|0,h)}switch(c|0){case 0:{j=+g[f+4>>2];al(a,+g[f>>2]+d,j,+g[f+8>>2]-d,j+e);break}case 1:{j=+g[f+8>>2];al(a,j-e,+g[f+4>>2]+d,j,+g[f+12>>2]-d);break}case 2:{j=+g[f+12>>2];al(a,+g[f>>2]+d,j-e,+g[f+8>>2]-d,j);break}case 3:{j=+g[f>>2];al(a,j,+g[f+4>>2]+d,j+e,+g[f+12>>2]-d);break}default:Cb(16777,4833,4333,11934)}l=i;return}function kl(){go((Cg()|0)+420|0);return}function ll(a){a=a|0;return ((a&100663296|0)==0?a>>>24&1|2:4)|0}function ml(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;c=+g[b+24>>2];c=c+ +Rk(b);e=+g[b+20>>2];d=e+ +g[b+36>>2];al(a,e,c,d,c+ +Sk(b));return}function nl(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[b+20>>2];c=+g[b+24>>2];al(a,d,c,d+ +g[b+28>>2],c+ +g[b+32>>2]);return}function ol(a,b){a=a|0;b=b|0;df(a,+g[b>>2],+g[b+12>>2]);return}function pl(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+8|0;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function ql(b){b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0.0,j=0,k=0.0,m=0.0,n=0,o=0.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;D=l;l=l+80|0;y=D+56|0;z=D+40|0;v=D+32|0;w=D+72|0;A=D+16|0;B=D;C=c[244]|0;h=c[C+6140>>2]|0;x=(b|0)==1;p=Kg(h,x?7043:7052,0)|0;b=(a[(x?h+129|0:h+128|0)>>0]|0)!=0;if(b)f=+g[C+5192>>2];else f=0.0;nl(y,h);d=+g[h+96>>2];if(x){q=+g[y+12>>2];al(z,d+ +g[h+20>>2],q-+g[C+5192>>2],+g[y+8>>2]-f-d,q-d)}else{q=+g[y+8>>2];al(z,q-+g[C+5192>>2],d+ +g[h+24>>2],q-d,+g[y+12>>2]-f-d);d=+Rk(h);if(!(c[h+8>>2]&1024))e=0.0;else e=+Sk(h);u=z+4|0;g[u>>2]=+g[u>>2]+(d+e)}if(!(+Dl(z)<=0.0)?!(+$h(z)<=0.0):0){if(x)b=b?4:12;else{u=c[h+8>>2]|0;b=((u&1|0)==0?0:u>>>9&2^2)|(b?0:8)}t=h+596|0;s=c[t>>2]|0;u=z+8|0;r=Rf(14,1.0)|0;Qv(s,z,u,r,+g[h+92>>2],b);q=-+Wh(+(~~((+g[u>>2]-+g[z>>2]+-2.0)*.5)|0),0.0,3.0);r=z+12|0;s=z+4|0;df(v,q,-+Wh(+(~~((+g[r>>2]-+g[s>>2]+-2.0)*.5)|0),0.0,3.0));El(z,v);if(x)o=+Dl(z);else o=+$h(z);n=x?h+104|0:h+108|0;f=+g[(x?h+36|0:h+40|0)>>2]-f;e=+g[(x?h+52|0:h+56|0)>>2];d=+vg(e,f);if(!(d>0.0))Cb(7061,4833,5063,7113);k=+g[n>>2];q=o*(f/+vg(d,1.0));q=+Wh(q,+g[C+5200>>2],o);m=q/o;a[v>>0]=0;a[w>>0]=0;h=c[C+6172>>2]|0;hl(z,p,w,v,0)|0;f=+vg(1.0,e-f);i=o-q;d=i*+Qf(k/f)/o;b=a[v>>0]|0;if(m<1.0&b<<24>>24!=0){j=x?C+10412|0:C+10416|0;k=+Qf((+g[(x?C+204|0:C+208|0)>>2]-(x?+g[z>>2]:+g[s>>2]))/o);ah(p);if((h|0)==(p|0)){b=0;e=m*.5;d=+g[j>>2]}else{b=!(k>=d)|!(k<=m+d);e=m*.5;d=b?0.0:k-d-e;g[j>>2]=d}d=+(~~(f*+Qf((k-d-e)/(1.0-m))+.5)|0);g[n>>2]=d;d=i*+Qf(d/f)/o;if(b)g[j>>2]=k-d-e;b=a[v>>0]|0}if(!(b<<24>>24))b=a[w>>0]|0?16:15;else b=17;b=Rf(b,1.0)|0;Eg(A);if(x){m=+yl(+g[z>>2],+g[u>>2],d);o=+g[s>>2];q=+yf(q+m,+g[y+8>>2]);al(B,m,o,q,+g[r>>2]);c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}else{k=+g[z>>2];o=+yl(+g[s>>2],+g[r>>2],d);m=+g[u>>2];al(B,k,o,m,+yf(q+o,+g[y+12>>2]));c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2]}Qv(c[t>>2]|0,A,A+8|0,b,+g[C+5196>>2],15)}l=D;return}function rl(a,b){a=a|0;b=b|0;Gv(a,c[a+92>>2]|0,c[a+84>>2]|0,b);Qs(a);return}function sl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))nu(a,ou(a,b)|0);c[a>>2]=b;return}function tl(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))pu(a,qu(a,b)|0);c[a>>2]=b;return}function ul(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))ru(a,su(a,b)|0);c[a>>2]=b;return}function vl(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){nu(a,ou(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function wl(b,d,e){b=b|0;d=d|0;e=+e;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;k=l;l=l+80|0;p=k+56|0;m=k+48|0;q=k+40|0;g=k+32|0;h=k+24|0;i=k+16|0;j=k+8|0;f=k;o=Ii()|0;df(q,e,e);rf(m,d,q);df(h,e,e);tf(g,d,h);lj(p,m,g);b=hl(p,b,m,q,0)|0;n=a[m>>0]|0;n=Rf((a[q>>0]|0)==0|n<<24>>24==0?(n<<24>>24?34:33):35,1.0)|0;Dn(g,p);d=o+596|0;o=c[d>>2]|0;Xv(o,g,+vg(2.0,e),n,12);e=e*.707099974155426+-1.0;if(a[m>>0]|0){q=c[d>>2]|0;df(i,e,e);tf(h,g,i);r=-e;df(f,r,r);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0);q=c[d>>2]|0;df(i,e,r);tf(h,g,i);df(f,r,e);tf(j,g,f);Ov(q,h,j,Rf(0,1.0)|0,1.0)}l=k;return b|0}function xl(a,b){a=a|0;b=b|0;df(a,+g[b+8>>2],+g[b+4>>2]);return}function yl(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function zl(){var b=0,d=0,e=0,f=0,h=0.0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=l;l=l+48|0;q=E+32|0;r=E+24|0;v=E+16|0;w=E+8|0;y=E;d=c[244]|0;B=Ii()|0;C=B+416|0;D=c[C>>2]|0;if(!D)Cb(9839,4833,11062,10018);mg();Li();s=B+596|0;vv(c[s>>2]|0);b=D+40|0;u=B+220|0;t=+vg(+g[b>>2],+g[u>>2]);g[b>>2]=t;g[u>>2]=t;u=D+4|0;b=c[u>>2]|0;if(!(b&16))g[B+240>>2]=+vg(+g[D+32>>2],+g[D+24>>2]);if(((b&1|0)==0?(a[B+144>>0]|0)==0:0)?(x=+g[D+28>>2],A=D+16|0,(c[A>>2]|0)>1):0){p=B+20|0;j=d+6528|0;k=D+44|0;m=x+1.0;n=B+436|0;o=B+444|0;b=-1;i=1;while(1){h=+g[p>>2];h=h+ +Hm(i);d=(c[D>>2]|0)+i|0;df(r,h+-4.0,x);df(v,h+4.0,t);lj(q,r,v);Wg(d);if(gh(q,d,0)|0)f=b;else{a[r>>0]=0;a[v>>0]=0;if(!(c[u>>2]&2)){hl(q,d,r,v,0)|0;e=a[r>>0]|0;d=a[v>>0]|0;if((d|e)<<24>>24!=0?(c[j>>2]=4,d<<24>>24!=0):0){f=(c[(Xq(k,i)|0)+8>>2]&2|0)==0;b=f?i:b;if(!(a[v>>0]|0)){d=a[r>>0]|0;z=16}else d=29}else{d=e;z=16}}else{d=0;z=16}if((z|0)==16){z=0;d=d<<24>>24?28:27}f=Rf(d,1.0)|0;h=+(~~h|0);e=c[s>>2]|0;df(w,h,+vg(m,+g[n>>2]));df(y,h,+yf(t,+g[o>>2]));Ov(e,w,y,f,1.0);f=b}i=i+1|0;b=c[A>>2]|0;if((i|0)>=(b|0))break;else b=f}if((f|0)!=-1){e=D+9|0;if(!((a[e>>0]|0)!=0|(b|0)<0)){d=D+44|0;b=0;while(1){z=c[(Xq(d,b)|0)>>2]|0;c[(Xq(d,b)|0)+4>>2]=z;if((b|0)<(c[A>>2]|0))b=b+1|0;else break}}a[e>>0]=1;Zq(f,+gr(D,f));b=1}else b=0}else b=0;a[D+9>>0]=b;c[C>>2]=0;g[B+412>>2]=0.0;g[B+216>>2]=+(~~(+g[B+20>>2]+ +g[B+404>>2]+0.0)|0);l=E;return}function Al(){var b=0,d=0,e=0,f=0;f=l;l=l+16|0;e=c[244]|0;b=e+10480|0;if(a[b>>0]|0){Zi(7805,f);a[b>>0]=0;b=e+10484|0;d=c[b>>2]|0;if(d|0){if((d|0)==(c[931]|0))o9(d)|0;else k9(d)|0;c[b>>2]=0}b=e+10488|0;if((Kn(c[b>>2]|0)|0)>1){th(Ln(c[b>>2]|0)|0);Mn(c[b>>2]|0)}}l=f;return}function Bl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Cl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Dl(a){a=a|0;return +(+g[a+8>>2]-+g[a>>2])}function El(a,b){a=a|0;b=b|0;var c=0,d=0;g[a>>2]=+g[a>>2]-+g[b>>2];c=b+4|0;d=a+4|0;g[d>>2]=+g[d>>2]-+g[c>>2];d=a+8|0;g[d>>2]=+g[b>>2]+ +g[d>>2];b=a+12|0;g[b>>2]=+g[c>>2]+ +g[b>>2];return}function Fl(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;d=f;c[d>>2]=a;e=(c[244]|0)+6088|0;a:do if((c[(Lk(e)|0)>>2]|0)!=(a|0)?(c[e>>2]|0)>0:0){b=0;while(1){if((c[(bi(e,b)|0)>>2]|0)==(a|0))break;b=b+1|0;if((b|0)>=(c[e>>2]|0))break a}Gl(e,(Hl(e)|0)+(b<<2)|0)|0;Mk(e,d)}while(0);l=f;return}function Gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+8|0;e=c[d>>2]|0;if(e>>>0<=b>>>0?(f=c[a>>2]|0,(e+(f<<2)|0)>>>0>b>>>0):0){e=b-e>>2;_aa(b|0,b+4|0,(f-e<<2)+-4|0)|0;c[a>>2]=(c[a>>2]|0)+-1;return (c[d>>2]|0)+(e<<2)|0}Cb(12705,37262,1064,12734);return 0}function Hl(a){a=a|0;return c[a+8>>2]|0}function Il(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){pu(a,qu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Jl(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0.0;k=l;l=l+16|0;i=k+4|0;h=k;j=Ii()|0;d=c[244]|0;if(b<=0.0)b=+Kl();n=+g[d+5168>>2];f=a+-1|0;m=+(f|0);o=+vg(1.0,+(~~((b-n*m)/+(a|0))|0));g[i>>2]=o;g[h>>2]=+vg(1.0,+(~~(b-(o+n)*m)|0));e=j+344|0;Il(e,h);if((a|0)>1){d=0;do{Il(e,i);d=d+1|0}while((d|0)!=(f|0))}c[j+324>>2]=c[(Ll(e)|0)>>2];l=k;return}function Kl(){var a=0.0,b=0,c=0;c=l;l=l+16|0;b=c;a=+g[(Cg()|0)+324>>2];if(a<0.0){Ol(b);a=+vg(1.0,a+ +g[b>>2])}l=c;return +(+(~~a|0))}function Ll(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Ml(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Nl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ol(a){a=a|0;var b=0,c=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;c=b;e=Cg()|0;qh(d);rf(c,e+216|0,e+20|0);rf(a,d,c);l=b;return}function Pl(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e;c[b>>2]=a;d=c[244]|0;if(!a){a=Lh()|0;c[b>>2]=a}Kh(a);Ql(d+6232|0,b);lv(c[(c[d+6140>>2]|0)+596>>2]|0,c[(c[b>>2]|0)+68>>2]|0);l=e;return}function Ql(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){tu(a,uu(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Rl(){var a=0;a=c[244]|0;nv(c[(c[a+6140>>2]|0)+596>>2]|0);a=a+6232|0;Sl(a);if(Tl(a)|0)a=Lh()|0;else a=c[(Ul(a)|0)>>2]|0;Kh(a);return}function Sl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Tl(a){a=a|0;return (c[a>>2]|0)==0|0}function Ul(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function Vl(a,b){a=a|0;b=b|0;var d=0;d=Ii()|0;if(b){b=d+320|0;c[b>>2]=c[b>>2]|a;a=b}else{b=d+320|0;c[b>>2]=c[b>>2]&~a;a=b}vl(d+332|0,a);return}function Wl(){var a=0,b=0;b=Ii()|0;a=b+332|0;Xl(a);if(Yl(a)|0)a=1;else a=c[(Zl(a)|0)>>2]|0;c[b+320>>2]=a;return}function Xl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Yl(a){a=a|0;return (c[a>>2]|0)==0|0}function Zl(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<2)|0;else Cb(37253,37262,1040,13011);return 0}function _l(a){a=a|0;Vl(1,a);return}function $l(){Wl();return}function am(a){a=a|0;Vl(2,a);return}function bm(){Wl();return}function cm(a){a=+a;var b=0,c=0,d=0;b=l;l=l+16|0;c=b;g[c>>2]=a;d=Ii()|0;g[d+328>>2]=a;Il(d+356|0,c);l=b;return}function dm(){var a=0,b=0.0,c=0;c=Ii()|0;a=c+356|0;Ml(a);if(Nl(a)|0)b=-1.0;else b=+g[(Ll(a)|0)>>2];g[c+328>>2]=b;return}function em(a){a=a|0;cf(a+4|0);return}function fm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){vu(a,wu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*20|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];return}function gm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*20|0)|0;else Cb(37253,37262,1040,13011);return 0}function hm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function im(a){a=a|0;if(a>>>0<17)return 1152+(a<<3)|0;else Cb(12007,4833,5390,12046);return 0}function jm(a,b){a=a|0;b=b|0;return b+(c[a+4>>2]|0)|0}function km(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){xu(a,yu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*12|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];return}function lm(a,b,d){a=a|0;b=b|0;d=+d;c[a>>2]=b;g[a+4>>2]=d;return}function mm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=c[d>>2];c[a+8>>2]=c[d+4>>2];return}function nm(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*12|0)|0;else Cb(37253,37262,1040,13011);return 0}function om(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function pm(a){a=a|0;var b=0;do switch(a|0){case 0:{b=31828;break}case 1:{b=31864;break}case 2:{b=7123;break}case 3:{b=7132;break}case 4:{b=7140;break}case 5:{b=7148;break}case 6:{b=7155;break}case 7:{b=7168;break}case 8:{b=7176;break}case 9:{b=7191;break}case 10:{b=7205;break}case 11:{b=7213;break}case 12:{b=7227;break}case 13:{b=7244;break}case 14:{b=7254;break}case 15:{b=7266;break}case 16:{b=7280;break}case 17:{b=7301;break}case 18:{b=7321;break}case 19:{b=7331;break}case 20:{b=7342;break}case 21:{b=31967;break}case 22:{b=7359;break}case 23:{b=7373;break}case 24:{b=7386;break}case 25:{b=7393;break}case 26:{b=7407;break}case 27:{b=31354;break}case 28:{b=7420;break}case 29:{b=7437;break}case 30:{b=7453;break}case 31:{b=7464;break}case 32:{b=7482;break}case 33:{b=7499;break}case 34:{b=7511;break}case 35:{b=7530;break}case 36:{b=32055;break}case 37:{b=7548;break}case 38:{b=32065;break}case 39:{b=7565;break}case 40:{b=7586;break}case 41:{b=7601;break}case 42:{b=7622;break}default:Cb(16777,4833,5486,33607)}while(0);return b|0}function qm(a){a=a|0;var b=0,d=0;b=c[244]|0;d=c[b+6140>>2]|0;if(!d)Cb(7690,4833,5538,33460);switch(a&3){case 3:{a=c[b+6144>>2]|0;if(!a)a=0;else a=(c[d+604>>2]|0)==(c[a+604>>2]|0);break}case 2:{a=(c[d+604>>2]|0)==(c[b+6144>>2]|0);break}case 1:{a=c[b+6144>>2]|0;if(!a)a=0;else a=Uh(a,d)|0;break}default:a=(d|0)==(c[b+6144>>2]|0)}return a|0}function rm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+28>>2])}function sm(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+32>>2])}function tm(a){a=a|0;var b=0,d=0;d=(c[(c[244]|0)+6140>>2]|0)+20|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function um(a,b){a=a|0;b=b|0;Pk(Cg()|0,a,b);return}function vm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Pk(a,b,c);return}function wm(a,b){a=a|0;b=b|0;Qk(c[(c[244]|0)+6140>>2]|0,a,b);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Qk(a,b,c);return}function ym(a,b){a=a|0;b=b|0;Tk(c[(c[244]|0)+6140>>2]|0,a,b);return}function zm(){return (a[(Cg()|0)+143>>0]|0)!=0|0}function Am(){return (a[(Cg()|0)+145>>0]|0)!=0|0}function Bm(a,b,c){a=a|0;b=b|0;c=c|0;a=Xj(a)|0;if(a|0)Tk(a,b,c);return}function Cm(a){a=a|0;if(a){a=Xj(a)|0;if(a|0)Qh(a)}else Qh(0);return}function Dm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g;h=c[244]|0;a[h+6344>>0]=1;lj(i,b,d);d=h+6320|0;c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];c[d+12>>2]=c[i+12>>2];c[h+6336>>2]=e;c[h+6340>>2]=f;l=g;return}function Em(a){a=a|0;var b=0,d=0,e=0;b=c[244]|0;e=a;d=c[e+4>>2]|0;a=b+6292|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;c[b+6312>>2]=1;return}function Fm(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;a[e+6300>>0]=b&1;c[e+6316>>2]=d|0?d:1;return}function Gm(){a[(c[244]|0)+6345>>0]=1;return}function Hm(a){a=a|0;var b=0,d=0,e=0.0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10886,31745);if((a|0)<0)a=c[d+12>>2]|0;b=d+44|0;if((a|0)<(c[b>>2]|0)){e=+g[(Xq(b,a)|0)>>2];return +(+yl(+g[d+20>>2],+g[d+24>>2],e))}else Cb(9853,4833,10890,31745);return +(0.0)}function Im(){var a=0,b=0;b=l;l=l+16|0;a=b;Ol(a);l=b;return +(+g[a>>2])}function Jm(a){a=a|0;var b=0,d=0;d=(Cg()|0)+68|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Km(a){a=a|0;var b=0,d=0;d=(Cg()|0)+76|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Lm(){var a=0;a=Cg()|0;return +(+g[a+76>>2]-+g[a+68>>2])}function Mm(){return +(+g[(c[244]|0)+5932>>2])}function Nm(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5164>>2])}function Om(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5148>>2]*2.0)}function Pm(){var a=0;a=c[244]|0;return +(+g[a+5164>>2]+(+g[a+5932>>2]+ +g[a+5148>>2]*2.0))}function Qm(){return c[(Ii()|0)+596>>2]|0}function Rm(){return c[(c[244]|0)+5928>>2]|0}function Sm(){return +(+g[(c[244]|0)+5932>>2])}function Tm(a){a=a|0;var b=0,d=0;d=(c[244]|0)+5940|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function Um(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;g[d+592>>2]=a;a=+_h(d);g[b+5952>>2]=a;g[b+5932>>2]=a;return}function Vm(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+16|0;d=b;c=Cg()|0;rf(d,c+216|0,c+20|0);tf(a,d,c+104|0);l=b;return}function Wm(){var a=0;a=Cg()|0;return +(+g[a+216>>2]-+g[a+20>>2]+ +g[a+104>>2])}function Xm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;d=b+8|0;f=Ii()|0;rf(d,f+20|0,f+104|0);tf(e,d,a);d=f+216|0;h=e;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function Ym(a){a=+a;var b=0;b=Ii()|0;a=+g[b+20>>2]-+g[b+104>>2]+a;g[b+216>>2]=a;b=b+240|0;g[b>>2]=+vg(+g[b>>2],a);return}function Zm(a){a=+a;var b=0;b=Ii()|0;a=+g[b+24>>2]-+g[b+108>>2]+a;g[b+220>>2]=a;b=b+244|0;g[b>>2]=+vg(+g[b>>2],a);return}function _m(a){a=a|0;var b=0;b=Cg()|0;rf(a,b+232|0,b+20|0);return}function $m(a){a=a|0;var b=0,d=0;d=(Cg()|0)+216|0;b=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=b;return}function an(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+16|0;e=b;f=Ii()|0;d=f+216|0;h=a;g=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=g;a=f+240|0;$k(e,a,d);d=c[e+4>>2]|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;l=b;return}function bn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+104>>2])}function cn(){return +(+g[(c[(c[244]|0)+6140>>2]|0)+108>>2])}function dn(){return +(+en(c[(c[244]|0)+6140>>2]|0))}function en(a){a=a|0;return +(+vg(0.0,+g[a+52>>2]-(+g[a+36>>2]-+g[a+132>>2])))}function fn(){return +(+gn(c[(c[244]|0)+6140>>2]|0))}function gn(a){a=a|0;return +(+vg(0.0,+g[a+56>>2]-(+g[a+40>>2]-+g[a+136>>2])))}function hn(a){a=+a;var b=0;b=Ii()|0;g[b+112>>2]=a;g[b+120>>2]=0.0;return}function jn(a){a=+a;var b=0;b=Ii()|0;a=+Rk(b)+a;g[b+116>>2]=a+ +Sk(b);g[b+124>>2]=0.0;return}function kn(a,b){a=+a;b=+b;var d=0,e=0.0,f=0,h=0;f=Ii()|0;if(!(b>=0.0&b<=1.0))Cb(7706,4833,5941,31010);a=+(~~(+g[f+108>>2]+a)|0);d=f+116|0;g[d>>2]=a;g[f+124>>2]=b;if(b<=0.0?+g[f+88>>2]>=a:0)g[d>>2]=0.0;else h=6;if(((h|0)==6?b>=1.0:0)?(e=+g[f+56>>2],e-+g[f+88>>2]+ +g[(c[244]|0)+5164>>2]<=a):0)g[d>>2]=e;return}function ln(a){a=+a;var b=0;b=Ii()|0;kn(+g[b+228>>2]-+g[b+24>>2]+(+g[b+256>>2]*a+(a+-.5)*+g[(c[244]|0)+5164>>2]*2.0),a);return}function mn(){if(Am()|0)ln(.5);return}function nn(a){a=a|0;var b=0;if((a|0)>-2){b=Ii()|0;c[b+628>>2]=a+1+(c[b+612>>2]|0);c[b+632>>2]=2147483647;return}else Cb(7755,4833,5972,33285)}function on(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,k=0,m=0.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,A=0;z=l;l=l+96|0;y=z+80|0;v=z+32|0;w=z+72|0;x=z+16|0;q=z+56|0;r=z+40|0;s=z+8|0;u=z+48|0;i=z;k=Ii()|0;if(!(a[k+144>>0]|0)){n=c[244]|0;if(!b)Cb(7768,4833,6062,31812);if(!d)t=b+(c8(b)|0)|0;else t=d;d=k+216|0;df(v,+g[d>>2],+g[k+220>>2]+ +g[k+252>>2]);e=+g[k+328>>2];h=e>=0.0;do if((t-b|0)<2001|h){if(h)e=+rh(d,e);else e=0.0;cj(w,b,t,0,e);tf(y,v,w);lj(x,v,y);bh(w,0.0);if(fh(x,0)|0){v=x;w=c[v+4>>2]|0;x=i;c[x>>2]=c[v>>2];c[x+4>>2]=w;c[y>>2]=c[i>>2];c[y+4>>2]=c[i+4>>2];aj(y,b,t,e);break}else break}else{p=+Mm();f=+g[k+436>>2];m=+g[k+444>>2];df(w,0.0,0.0);e=+g[v+4>>2];if(e<=m){h=v;k=c[h+4>>2]|0;i=x;c[i>>2]=c[h>>2];c[i+4>>2]=k;m=(c[j>>2]=k,+g[j>>2]);if((a[n+10480>>0]|0)==0?(o=~~((f-e)/p),(o|0)>0):0){if(t>>>0>b>>>0){d=0;do{n=e8(b,10)|0;b=((n|0)==0?t:n)+1|0;d=d+1|0}while(b>>>0>>0&(d|0)<(o|0));e=+(d|0)}else e=0.0;g[x+4>>2]=p*e+m}if(b>>>0>>0){df(r,3402823466385288598117041.0e14,p);tf(y,x,r);lj(q,x,y);h=q+4|0;i=q+12|0;k=x+4|0;do{d=e8(b,10)|0;if(gh(q,0,0)|0)break;cj(r,b,d,0,-1.0);g[w>>2]=+vg(+g[w>>2],+g[r>>2]);A=x;n=c[A+4>>2]|0;o=s;c[o>>2]=c[A>>2];c[o+4>>2]=n;c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];_i(y,b,d,0);b=((d|0)==0?t:d)+1|0;g[h>>2]=p+ +g[h>>2];g[i>>2]=p+ +g[i>>2];g[k>>2]=p+ +g[k>>2]}while(b>>>0>>0);if(b>>>0>>0){d=0;do{A=e8(b,10)|0;b=((A|0)==0?t:A)+1|0;d=d+1|0}while(b>>>0>>0);e=+(d|0)}else e=0.0;g[k>>2]=p*e+ +g[k>>2]}rf(u,x,v);A=w+4|0;g[A>>2]=+g[u+4>>2]+ +g[A>>2]}tf(x,v,w);lj(y,v,x);dh(y,0.0);fh(y,0)|0}while(0)}l=z;return}function pn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;Zj(a,e);l=d;return} +function qn(a,b,c){a=a|0;b=b|0;c=c|0;Bk(0,a);Zj(b,c);Gk(1);return}function rn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;qn(a,b,f);l=e;return}function sn(a,b){a=a|0;b=b|0;Bk(0,(c[244]|0)+5256|0);Zj(a,b);Gk(1);return}function tn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;sn(a,e);l=d;return}function un(a,b){a=a|0;b=b|0;if(+g[(c[(c[244]|0)+6140>>2]|0)+328>>2]<0.0){cm(0.0);Zj(a,b);dm()}else Zj(a,b);return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;un(a,e);l=d;return}function wn(){var b=0,d=0.0,e=0,f=0;b=Ii()|0;if(!(a[b+144>>0]|0)){f=c[244]|0;e=b+248|0;d=+g[f+5148>>2];g[e>>2]=+vg(+g[e>>2],+g[f+5932>>2]+d*2.0);b=b+252|0;g[b>>2]=+vg(+g[b>>2],d)}return}function xn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+80|0;j=u+64|0;n=u+56|0;p=u+40|0;q=u+24|0;r=u+8|0;s=u;t=u+16|0;f=Ii()|0;if(!(a[f+144>>0]|0)){k=c[244]|0;m=+Kl();cj(n,b,0,1,-1.0);f=f+216|0;h=k+5148|0;df(q,m,+g[n+4>>2]+ +g[h>>2]*2.0);tf(j,f,q);lj(p,f,j);if(+g[n>>2]>0.0)i=+g[k+5168>>2];else i=0.0;df(s,m+i,+g[h>>2]*2.0);tf(r,f,s);tf(j,r,n);lj(q,f,j);dh(q,+g[h>>2]);if(fh(q,0)|0?(r=k+11e3|0,s=(Ff(r,3073,d,e)|0)+(k+11e3)|0,o=p+8|0,df(j,0.0,.5),bj(p,o,r,s,0,j,0),+g[n>>2]>0.0):0){df(t,+g[o>>2]+ +g[k+5168>>2],+g[p+4>>2]+ +g[h>>2]);c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];_i(j,b,0,1)}}l=u;return}function yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xn(a,b,f);l=e;return}function zn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=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,A=0,B=0,C=0;A=l;l=l+96|0;z=A+72|0;y=A+64|0;r=A+56|0;s=A+40|0;t=A+48|0;u=A+32|0;v=A+16|0;w=A+81|0;x=A+80|0;m=A+8|0;n=A;o=Ii()|0;if(!(a[o+144>>0]|0)){p=c[244]|0;q=Kg(o,b,0)|0;cj(r,b,0,1,-1.0);C=o+216|0;i=c[C+4>>2]|0;B=s;c[B>>2]=c[C>>2];c[B+4>>2]=i;f=(c[j>>2]=i,+g[j>>2]);i=p+5148|0;k=+g[i>>2];if(e&512|0?(h=+g[o+252>>2],k>2]=h-k+f;B=d;C=c[B+4>>2]|0;d=u;c[d>>2]=c[B>>2];c[d+4>>2]=C;d=p+5144|0;h=+g[r>>2]+ +g[d>>2]*2.0;k=+g[r+4>>2]+k*2.0;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];ph(t,z,h,k);tf(z,s,t);lj(v,s,z);dh(v,+g[i>>2]);if(fh(v,q)|0){C=hl(v,q,w,x,(c[o+320>>2]|0)>>>1&1|e)|0;u=a[w>>0]|0;x=Rf(u<<24>>24==0|(a[x>>0]|0)==0?(u<<24>>24?22:21):23,1.0)|0;u=v;t=c[u+4>>2]|0;B=m;c[B>>2]=c[u>>2];c[B+4>>2]=t;B=v+8|0;t=B;u=c[t+4>>2]|0;w=n;c[w>>2]=c[t>>2];c[w+4>>2]=u;k=+g[p+5152>>2];c[y>>2]=c[m>>2];c[y+4>>2]=c[m+4>>2];c[z>>2]=c[n>>2];c[z+4>>2]=c[n+4>>2];dj(y,z,x,1,k);tf(z,v,d);rf(y,B,d);bj(z,y,b,0,r,p+5208|0,v);d=C}else d=0}else d=0;l=A;return d|0}function An(a,b){a=a|0;b=b|0;return zn(a,b,0)|0}function Bn(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b;d=(c[244]|0)+5148|0;e=c[d>>2]|0;g[d>>2]=0.0;df(f,0.0,0.0);a=zn(a,f,512)|0;c[d>>2]=e;l=b;return a|0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;j=k+24|0;e=k+16|0;f=k;g=k+8|0;h=k+40|0;i=Ii()|0;if(!(a[i+144>>0]|0)){b=Kg(i,b,0)|0;n=d;m=c[n+4>>2]|0;d=f;c[d>>2]=c[n>>2];c[d+4>>2]=m;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];ph(e,j,0.0,0.0);i=i+216|0;tf(g,i,e);lj(j,i,g);dh(j,0.0);if(fh(j,b)|0)b=hl(j,b,g,h,0)|0;else b=0}else b=0;l=k;return b|0}function Dn(a,b){a=a|0;b=b|0;df(a,(+g[b>>2]+ +g[b+8>>2])*.5,(+g[b+4>>2]+ +g[b+12>>2])*.5);return}function En(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+48|0;o=s+32|0;p=s+24|0;q=s+16|0;r=s+8|0;n=s;j=Ii()|0;if(!(a[j+144>>0]|0)){m=j+216|0;tf(p,m,d);lj(o,m,p);m=i+12|0;if(+g[m>>2]>0.0){df(p,2.0,2.0);Zh(o+8|0,p)}dh(o,0.0);do if(fh(o,0)|0){d=j+596|0;j=c[d>>2]|0;k=o+8|0;if(+g[m>>2]>0.0){Pv(j,o,k,Sf(i)|0,0.0,15,1.0);i=c[d>>2]|0;df(q,1.0,1.0);tf(p,o,q);df(n,1.0,1.0);rf(r,k,n);ew(i,b,p,r,e,f,Sf(h)|0);break}else{ew(j,b,o,k,e,f,Sf(h)|0);break}}while(0)}l=s;return}function Fn(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;x=l;l=l+96|0;v=x+72|0;u=x+64|0;s=x+32|0;t=x+16|0;w=x+48|0;m=x+40|0;n=x+80|0;o=x+8|0;p=x;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;Gn(b);k=Kg(q,7779,0)|0;kl();if((h|0)>-1){y=+(h|0);df(s,y,y)}else{A=r+5144|0;z=c[A+4>>2]|0;h=s;c[h>>2]=c[A>>2];c[h+4>>2]=z}A=q+216|0;tf(u,A,d);gf(w,s,2.0);tf(v,u,w);lj(t,A,v);tf(v,A,s);tf(m,A,s);tf(u,m,d);lj(w,v,u);dh(t,0.0);if(fh(t,k)|0){d=hl(t,k,m,n,0)|0;m=a[m>>0]|0;m=Rf(m<<24>>24==0|(a[n>>0]|0)==0?(m<<24>>24?22:21):23,1.0)|0;n=t;A=c[n+4>>2]|0;z=o;c[z>>2]=c[n>>2];c[z+4>>2]=A;t=t+8|0;z=c[t+4>>2]|0;A=p;c[A>>2]=c[t>>2];c[A+4>>2]=z;y=+yf(+g[s>>2],+g[s+4>>2]);y=+Wh(y,0.0,+g[r+5152>>2]);c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];dj(u,v,m,1,y);m=q+596|0;if(+g[i+12>>2]>0.0){h=c[m>>2]|0;k=w+8|0;Qv(h,w,k,Sf(i)|0,0.0,15);h=w}else{h=w;k=w+8|0}A=c[m>>2]|0;ew(A,b,h,k,e,f,Sf(j)|0)}else d=0}else d=0;l=x;return d|0}function Gn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function Hn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=c[931],c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[244]|0;f=e+10480|0;do if(!(a[f>>0]|0)){g=c[e+6140>>2]|0;if(!d){d=c[e+24>>2]|0;if(!d)break}d=Yf(d,7786)|0;c[e+10484>>2]=d;if(!d)Cb(7789,4833,6539,33017);a[f>>0]=1;c[e+10492>>2]=c[g+268>>2];if((b|0)>-1)c[e+10496>>2]=b}while(0);return}function Jn(b){b=b|0;var d=0,e=0,f=0;d=c[244]|0;e=d+10480|0;if((a[e>>0]|0)==0?(f=c[d+6140>>2]|0,a[e>>0]=1,c[d+10484>>2]=0,c[d+10492>>2]=c[f+268>>2],(b|0)>-1):0)c[d+10496>>2]=b;return}function Kn(a){a=a|0;return (c[a>>2]|0)+-1|0}function Ln(a){a=a|0;return Xs(a)|0}function Mn(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;zi(b);a[d>>0]=0;qs(b,d);l=c;return}function Nn(){var a=0,b=0,d=0,e=0,f=0,g=0;f=l;l=l+16|0;d=f;a=c[244]|0;el(33052);df(d,0.0,0.0);g=An(7807,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);b=An(7818,d)|0;ch(0.0,-1.0);df(d,0.0,0.0);d=An(7830,d)|0;ch(0.0,-1.0);kg(80.0);_l(0);e=a+10496|0;On(7847,e,0,9,0)|0;$l();mg();kl();if(g)Hn(c[e>>2]|0);if(b)In(c[e>>2]|0,c[a+24>>2]|0);if(d)Jn(c[e>>2]|0);l=f;return}function On(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;h=l;l=l+16|0;i=h;g[i>>2]=+(c[b>>2]|0);f=xo(a,i,+(d|0),+(e|0),f|0?f:7924,1.0)|0;c[b>>2]=~~+g[i>>2];l=h;return f|0}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!(d&256)){h=c[244]|0;i=c[h+6140>>2]|0;f=c[i+312>>2]|0;g=h+6348|0;e=c[g>>2]|0;if(!e)e=($f(f,b,d>>>5&1)|0)!=0;else{do if(!(e&1)){e=$f(f,b,-1)|0;if((e|0)==-1){e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0;break}else{e=(e|0)!=0;break}}else{e=a[h+6346>>0]|0;hg(f,b,e&255);e=e<<24>>24!=0}while(0);c[g>>2]=0}if((d&16|0)==0&(a[h+10480>>0]|0)!=0)return e|(c[i+268>>2]|0)<(c[h+10496>>2]|0)|0}else e=1;return e|0}function Qn(b,e,f,h){b=b|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.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.0,P=0.0;N=l;l=l+160|0;L=N+136|0;M=N+128|0;I=N+64|0;J=N+112|0;K=N+40|0;i=N+120|0;o=N+88|0;C=N+145|0;s=N+144|0;D=N;E=N+56|0;F=N+32|0;G=N+104|0;v=N+24|0;w=N+16|0;x=N+80|0;y=N+72|0;z=N+8|0;q=Ii()|0;if(!(a[q+144>>0]|0)){H=c[244]|0;A=(e&2|0)!=0;if((e&1024|0)==0&(A^1))df(I,+g[H+5144>>2],0.0);else{p=H+5144|0;t=c[p+4>>2]|0;u=I;c[u>>2]=c[p>>2];c[u+4>>2]=t}if(!h)u=Yi(f,0)|0;else u=h;cj(J,f,u,0,-1.0);m=+g[I+4>>2];B=+vg(m,+g[q+252>>2]);t=H+5932|0;r=+yf(+g[q+248>>2],+g[t>>2]+ +g[H+5148>>2]*2.0);m=+vg(r,m*2.0+ +g[J+4>>2]);r=+g[q+20>>2];qh(i);df(L,r+ +g[i>>2],m+ +g[q+220>>2]);lj(K,q+216|0,L);if(A){r=+(~~(+g[q+84>>2]*.5)|0)+-1.0;g[K>>2]=+g[K>>2]-r;p=K+8|0;g[p>>2]=+g[p>>2]+r}P=+g[t>>2];k=+g[I>>2];r=P+(A?3.0:2.0)*k;O=+g[J>>2];k=P+(O>0.0?O+k*2.0:0.0);df(L,k,m);bh(L,B);if(A){c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2]}else{P=+g[K>>2];al(o,P,+g[K+4>>2],k+P+ +g[H+5160>>2]*2.0,+g[K+12>>2])}h=Pn(b,e)|0;if(!(fh(o,b)|0)){if((e&8|0)==0&h){Rn(b);h=1}}else{i=e&4;n=(i|0)==0;j=(e&64|0)!=0;p=(e&256|0)==0;if(p&(hl(o,b,C,s,i<<4|(j?e>>>6&2|16:0)|5120)|0)){i=(e&192|0)==0;if(e&128){df(L,r+ +g[o>>2],+g[o+12>>2]);i=i|(hh(o,L,1)|0)}if(j)i=(d[H+881>>0]|i&1|0)!=0;j=h^1;if(i&((a[H+6896>>0]|0)==0|j)){hg(c[q+312>>2]|0,b,j&1);h=j}}if(!n)Pj();j=a[C>>0]|0;j=Rf((a[s>>0]|0)==0|j<<24>>24==0?(j<<24>>24?25:24):26,1.0)|0;df(L,r,B);tf(D,K,L);do if(A){A=K;z=c[A+4>>2]|0;i=E;c[i>>2]=c[A>>2];c[i+4>>2]=z;i=K+8|0;z=i;A=c[z+4>>2]|0;C=F;c[C>>2]=c[z>>2];c[C+4>>2]=A;P=+g[H+5152>>2];c[M>>2]=c[E>>2];c[M+4>>2]=c[E+4>>2];c[L>>2]=c[F>>2];c[L+4>>2]=c[F+4>>2];dj(M,L,j,1,P);df(M,+g[I>>2],B);tf(G,K,M);c[L>>2]=c[G>>2];c[L+4>>2]=c[G+4>>2];fj(L,h?3:1,1.0);if(!(a[H+10480>>0]|0)){df(L,0.0,0.0);bj(D,i,f,u,J,L,0);break}else{$i(D,7853,7856);df(L,0.0,0.0);bj(D,i,f,u,J,L,0);$i(D,7858,7860);break}}else{if(!((e&1|0)==0&(a[C>>0]|0)==0)){J=K;G=c[J+4>>2]|0;F=v;c[F>>2]=c[J>>2];c[F+4>>2]=G;F=K+8|0;G=c[F+4>>2]|0;J=w;c[J>>2]=c[F>>2];c[J+4>>2]=G;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[L>>2]=c[w>>2];c[L+4>>2]=c[w+4>>2];dj(M,L,j,0,0.0)}if(!(e&512)){if(p){df(M,+g[I>>2],B+ +g[t>>2]*.15000000596046448);tf(y,K,M);c[L>>2]=c[y>>2];c[L+4>>2]=c[y+4>>2];fj(L,h?3:1,.699999988079071)}}else{df(M,r*.5,B+ +g[t>>2]*.5);tf(x,K,M);c[L>>2]=c[x>>2];c[L+4>>2]=c[x+4>>2];gj(L)}if(a[H+10480>>0]|0)$i(D,7860,0);J=D;K=c[J+4>>2]|0;M=z;c[M>>2]=c[J>>2];c[M+4>>2]=K;c[L>>2]=c[z>>2];c[L+4>>2]=c[z+4>>2];_i(L,f,u,0)}while(0);if((e&8|0)==0&h)Rn(b)}}else h=0;l=N;return h|0}function Rn(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Ii()|0;Up(0.0);e=a+268|0;c[e>>2]=(c[e>>2]|0)+1;Jg(a+420|0,d);l=b;return}function Sn(b,c){b=b|0;c=c|0;var d=0;d=Ii()|0;if(!(a[d+144>>0]|0))b=Qn(Kg(d,b,0)|0,c|26,b,0)|0;else b=0;return b|0}function Tn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+32|0;h=m+8|0;i=m;j=Ii()|0;do if(!(a[j+144>>0]|0)){k=(d|0)!=0;if(k?(a[d>>0]|0)==0:0){b=0;break}f=Kg(j,b,0)|0;b=Qn(f,(k?4:0)|e|26,b,0)|0;if(k){e=c[244]|0;n=+g[e+5932>>2]*.5;Un(h);k=Xg(j,f+1|0)|0;o=+yf(+g[j+284>>2],+g[j+440>>2]);df(i,o-+g[e+5144>>2]-n,n+(+g[j+280>>2]+ +g[e+5148>>2]));if(wl(k,i,n)|0)a[d>>0]=0;Vn(h)}}else b=0;while(0);l=m;return b|0}function Un(a){a=a|0;Eg(a+4|0);Ys(a);return}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[d+272>>2]=c[b>>2];f=b+4|0;e=d+276|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[d+292>>0]=a[b+20>>0]|0;return}function Wn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Kg(g,b,0)|0,d,h,f)|0}else b=0;return b|0}function Xn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=Ii()|0;if(!(a[g+144>>0]|0)){i=c[244]|0;h=i+11e3|0;f=(Ff(h,3073,e,f)|0)+(i+11e3)|0;b=Qn(Xg(g,b)|0,d,h,f)|0}else b=0;return b|0}function Yn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Wn(a,b,d,g)|0;l=f;return e|0}function Zn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=Xn(a,b,d,g)|0;l=f;return e|0}function _n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Wn(a,0,b,f)|0;l=e;return d|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=Xn(a,0,b,f)|0;l=e;return d|0}function ao(b){b=b|0;var c=0;c=Ii()|0;if(!(a[c+144>>0]|0))b=Qn(Kg(c,b,0)|0,0,b,0)|0;else b=0;return b|0}function bo(){var a=0,b=0.0;a=c[244]|0;b=+co();a=(c[a+6140>>2]|0)+216|0;g[a>>2]=b+ +g[a>>2];return}function co(){var a=0;a=c[244]|0;return +(+g[a+5932>>2]+ +g[a+5144>>2]*2.0)}function eo(b,d){b=b|0;d=d|0;var e=0;e=c[244]|0;if(!(a[(c[e+6140>>2]|0)+144>>0]|0)){a[e+6346>>0]=b&1;c[e+6348>>2]=d|0?d:1}return}function fo(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Cg()|0;c[d>>2]=Xg(e,a)|0;Jg(e+420|0,d);l=b;return}function go(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function ho(a){a=a|0;return Kg(c[(c[244]|0)+6140>>2]|0,a,0)|0}function io(a){a=a|0;return Xg(c[(c[244]|0)+6140>>2]|0,a)|0}function jo(){var b=0,d=0,e=0,f=0,h=0,i=0.0,j=0,k=0,m=0,n=0.0,o=0;m=l;l=l+48|0;b=m+32|0;d=m+16|0;e=m;j=m+8|0;k=Ii()|0;if(!(a[k+144>>0]|0)){o=c[244]|0;f=o+5932|0;n=+g[f>>2];h=o+5144|0;i=+vg(+yf(+g[k+248>>2],n+ +g[o+5148>>2]*2.0),n);k=k+216|0;df(e,n,i);tf(b,k,e);lj(d,k,b);dh(d,0.0);if(fh(d,0)|0){df(e,+g[h>>2]+ +g[f>>2]*.5,i*.5);tf(j,d,e);c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];gj(b);ch(0.0,+g[h>>2]*2.0)}else ch(0.0,+g[h>>2]*2.0)}l=m;return}function ko(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=l;l=l+64|0;n=u+48|0;p=u+40|0;q=u+24|0;r=u;s=u+16|0;t=u+8|0;f=Ii()|0;if(!(a[f+144>>0]|0)){v=c[244]|0;o=v+11e3|0;d=(Ff(o,3073,b,d)|0)+(v+11e3)|0;cj(p,o,d,0,-1.0);h=+vg(0.0,+g[f+252>>2]);i=v+5932|0;j=+g[i>>2];k=v+5144|0;m=+vg(+yf(+g[f+248>>2],j+ +g[v+5148>>2]*2.0),j);b=f+216|0;e=+g[p>>2];if(e>0.0)e=e+ +g[k>>2]*2.0;else e=0.0;df(r,j+e,+vg(m,+g[p+4>>2]));tf(n,b,r);lj(q,b,n);dh(q,0.0);if(fh(q,0)|0){df(r,+g[k>>2]+ +g[i>>2]*.5,m*.5);tf(s,q,r);c[n>>2]=c[s>>2];c[n+4>>2]=c[s+4>>2];gj(n);df(r,+g[i>>2]+ +g[k>>2]*2.0,h);tf(t,q,r);c[n>>2]=c[t>>2];c[n+4>>2]=c[t+4>>2];_i(n,o,d,0)}}l=u;return}function lo(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;ko(a,e);l=d;return}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,i=0,j=0,k=0,m=0,n=0;k=l;l=l+48|0;i=k+8|0;m=k;j=c[244]|0;n=Ii()|0;h=j+10364|0;_g(c[h>>2]|0,n);ah(0);oh(n);no(d,e,g,i);eh(m,a);a=oo(b,i,32,m,17,0,0)|0;do if(!(c[h>>2]|0))if((c[j+6172>>2]|0)==(f|0)){c[h>>2]=f;ah(f);break}else Cb(7862,4833,7139,7879);while(0);if(a)a=po(i,qo((c[244]|0)+7012|0)|0,d,e,0)|0;else a=0;l=k;return a|0}function no(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+48|0;m=n+24|0;k=n+16|0;j=n+8|0;i=n;a:do switch(a|0){case 0:{a=c[b>>2]|0;if((d|0)<0){c[i>>2]=a;Ef(e,32,8680,i)|0;break a}else{c[j>>2]=d;c[j+4>>2]=a;Ef(e,32,12062,j)|0;break a}}case 1:{f=+g[b>>2];if((d|0)<0){h[k>>3]=f;Ef(e,32,8665,k)|0;break a}else{c[m>>2]=d;h[m+8>>3]=f;Ef(e,32,12067,m)|0;break a}}default:{}}while(0);l=n;return}function oo(d,e,f,h,i,j,k){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=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,_=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;qa=l;l=l+288|0;ga=qa+240|0;pa=qa+224|0;oa=qa+216|0;O=qa+208|0;m=qa+80|0;P=qa+64|0;o=qa+192|0;L=qa+56|0;M=qa+48|0;ha=qa+40|0;ia=qa+32|0;ja=qa+24|0;T=qa+184|0;U=qa+176|0;aa=qa+16|0;ba=qa+160|0;ca=qa+144|0;da=qa;W=qa+128|0;X=qa+112|0;Y=qa+104|0;Z=qa+96|0;_=qa+88|0;ka=qa+168|0;y=Ii()|0;if(!(a[y+144>>0]|0)){C=(i&128|0)!=0;S=i&1048576;if(!((S|0)==0|C^1))Cb(8109,4833,8409,8201);D=(i&64|0)!=0;A=(i&1024|0)==0;if(!(A|D^1))Cb(8213,4833,8410,8201);la=c[244]|0;ma=(S|0)!=0;ea=(i&16384|0)==0;na=(i&32768|0)!=0;B=(i&65536|0)!=0;if(ma)Co();Q=Kg(y,d,0)|0;cj(oa,d,0,1,-1.0);V=h;$=c[V+4>>2]|0;fa=m;c[fa>>2]=c[V>>2];c[fa+4>>2]=$;n=+Kl();if(ma)p=+Mm()*8.0;else p=+g[oa+4>>2];N=la+5144|0;fa=la+5148|0;I=p+ +g[fa>>2]*2.0;c[ga>>2]=c[m>>2];c[ga+4>>2]=c[m+4>>2];ph(O,ga,n,I);$=y+216|0;tf(ga,$,O);lj(P,$,ga);$=P+8|0;n=+g[oa>>2];if(n>0.0)n=n+ +g[la+5168>>2];else n=0.0;df(pa,n,0.0);tf(ga,$,pa);lj(o,P,ga);do if(ma){eh(ga,P);if(Ak(Q,ga,0)|0){V=Ii()|0;g[O>>2]=+g[O>>2]-+g[V+132>>2];E=18;break}else{Ek();Do();h=0;break}}else{dh(o,+g[fa>>2]);if(fh(o,Q)|0){V=y;E=18}else h=0}while(0);if((E|0)==18){z=kh(P,Q)|0;if(z)c[la+6528>>2]=1;do if(na){K=la+5928|0;R=bw(c[K>>2]|0,42)|0;h=la+10280|0;K=c[K>>2]|0;c[h>>2]=c[K>>2];c[la+10284>>2]=c[K+4>>2];G=K+8|0;H=c[G+4>>2]|0;J=la+10288|0;c[J>>2]=c[G>>2];c[J+4>>2]=H;c[la+10352>>2]=c[K+72>>2];c[la+10356>>2]=c[K+76>>2];c[la+10348>>2]=c[K+68>>2];c[la+10332>>2]=R;c[la+10336>>2]=c[R+4>>2];if((mp(la+10296|0)|0?Nl(la+10308|0)|0:0)?np(la+10320|0)|0:0){Pl(h);break}Cb(8312,4833,8464,8201)}while(0);J=la+6996|0;m=mh(y,Q,(i&1088|0)==0)|0;if(m)u=(c[y+612>>2]|0)==(c[y+620>>2]|0);else u=0;w=m&(u^1);if(z)x=(a[la+876>>0]|0)!=0;else x=0;K=la+6172|0;if((ma?(c[K>>2]|0)==0:0)?(c[J>>2]|0)==(Q|0):0){t=c[la+6176>>2]|0;t=(t|0)==(Yg(V,7052,0)|0)}else t=0;v=c[K>>2]|0;o=(v|0)==(Q|0);s=(i&16|0)!=0&(o^1);h=s&1;if(m|x|t){if(!o){m=la+7040|0;o=c[m>>2]|0;R=la+7e3|0;G=f+1|0;op(R,G);H=la+7012|0;pg(H,G);zf(c[la+7020>>2]|0,e,c[H>>2]|0);c[ga>>2]=0;c[m>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;jp(J);do if((c[J>>2]|0)==(Q|0)){if((o|0)!=(c[m>>2]|0)){E=39;break}pp(J)}else E=39;while(0);if((E|0)==39){c[J>>2]=Q;g[la+7048>>2]=0.0;qp(la+7052|0,(ma^1)&1);h=ma?h:(u|s)&1}if(i&8192|0)a[la+7064>>0]=1;do if(!ma){if(!w){if(!x)break;if(!(a[la+225>>0]|0))break}h=1}while(0)}_g(Q,y);Qh(y);w=0;s=(h&1)!=0;h=c[K>>2]|0}else{w=(a[la+876>>0]|0)!=0;h=v}do if((h|0)==(Q|0)){if(!ea?(a[la+6185>>0]|0)==0:0){R=la+7e3|0;op(R,f+1|0);c[ga>>2]=0;c[la+7040>>2]=pf(c[la+7008>>2]|0,c[R>>2]|0,e,0,ga)|0;c[la+7036>>2]=(c[ga>>2]|0)-e;pp(J)}c[la+7044>>2]=f;t=la+212|0;m=a[t>>0]|0;a[la+6186>>0]=m^1;c[la+10996>>2]=1;n=+g[la+204>>2]-+g[P>>2]-+g[N>>2]+ +g[la+7048>>2];if(ma)p=+g[la+208>>2]-+g[V+220>>2]-+g[fa>>2];else p=+g[la+5932>>2]*.5;o=(a[la+168>>0]|0)!=0;a:do if(s)E=60;else{h=z^1;if(!(o|h)?a[la+881>>0]|0:0){E=60;break}do if(!(h|o^1)){if(!(a[la+881>>0]|0))break;hp(J,65548);hp(J,196621);break a}while(0);do if(a[la+876>>0]|0){if(a[la+10277>>0]|0)break;sp(J,la+7052|0,n,p);jp(J);break a}while(0);if(!(m<<24>>24))break;if(a[la+10277>>0]|0)break;if(!(+g[la+800>>2]!=0.0)?!(+g[la+804>>2]!=0.0):0)break;tp(J,la+7052|0,n,p);jp(J);a[la+10276>>0]=1}while(0);if((E|0)==60){rp(J);a[la+10277>>0]=1}h=la+10277|0;do if(a[h>>0]|0){if(a[t>>0]|0)break;a[h>>0]=0}while(0);m=la+742|0;if(!(b[m>>1]|0))break;if(!(a[la+225>>0]|0)){if(ea)E=79}else if(!((a[la+227>>0]|0)==0|ea^1))E=79;b:do if((E|0)==79){h=0;while(1){o=b[la+742+(h<<1)>>1]|0;if(!(o<<16>>16))break b;c[ga>>2]=o&65535;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);if((h|0)<16)h=h+1|0;else break}}while(0);t=m;u=t+34|0;do{b[t>>1]=0;t=t+2|0}while((t|0)<(u|0))}while(0);c:do if((c[K>>2]|0)==(Q|0)?!(w|(a[la+6185>>0]|0)!=0):0){v=la+226|0;h=a[v>>0]|0;w=h<<24>>24?131072:0;x=la+168|0;m=a[x>>0]|0;do if(!(m<<24>>24)){if(a[la+225>>0]|0?(a[la+228>>0]|0)==0:0){E=92;break}t=la+225|0;h=(a[t>>0]|0)!=0;u=0;o=la+227|0;s=0}else{if(a[la+228>>0]|0?(a[la+225>>0]|0)==0:0){E=92;break}h=la+227|0;m=la+225|0;o=h;h=(a[h>>0]|0)!=0;s=0;E=95}while(0);if((E|0)==92){s=(a[la+227>>0]|h)<<24>>24==0;R=m<<24>>24!=0;m=la+225|0;o=la+227|0;h=(a[(R?o:m)>>0]|0)!=0;if(R)E=95;else{u=0;t=m}}do if((E|0)==95){if(!(a[la+228>>0]|0)){u=0;t=m;break}if(a[m>>0]|0){u=0;t=m;break}u=(a[o>>0]|0)==0;t=m}while(0);if(nh(1,1)|0){hp(J,(u?65540:h?65548:65536)|w);o=0;R=0;H=0;break}if(nh(2,1)|0){hp(J,(u?65541:h?65549:65537)|w);o=0;R=0;H=0;break}m=ma^1;if(!(m|(nh(3,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65542:65538)|w);o=0;R=0;H=0;break}else{ai(V,+vg(+g[V+108>>2]-+g[la+5932>>2],0.0));o=0;R=0;H=0;break}if(!(m|(nh(4,1)|0)^1))if(!(a[t>>0]|0)){hp(J,(u?65543:65539)|w);o=0;R=0;H=0;break}else{I=+g[V+108>>2]+ +g[la+5932>>2];ai(V,+yf(I,+fn()));o=0;R=0;H=0;break}if(nh(7,1)|0){hp(J,(a[t>>0]|0?65542:65540)|w);o=0;R=0;H=0;break}if(nh(8,1)|0){hp(J,(a[t>>0]|0?65543:65541)|w);o=0;R=0;H=0;break}m=ea^1;if(!(m|(nh(9,1)|0)^1)){hp(J,w|65544);o=0;R=0;H=0;break}if(!(m|(nh(10,1)|0)^1)){do if(!(vp(J)|0)){if(h){hp(J,196620);break}if(!(a[x>>0]|0))break;if(!(a[la+228>>0]|0))break;if(a[o>>0]|0)break;if(a[t>>0]|0)break;hp(J,196612)}while(0);hp(J,w|65545);o=0;R=0;H=0;break}if(nh(11,1)|0){if(!ma){o=0;R=1;H=1;break}h=(a[t>>0]|0)==0;if(!(i&2048)){h=h^1;if(m|h){o=0;R=h;H=h;break}}else if(h|m){o=0;R=h;H=h;break}c[ga>>2]=10;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break}do if(!A){if(!(nh(0,1)|0))break;if(a[t>>0]|0)break;if(a[v>>0]|0)break;if((a[o>>0]|0)!=0|m)break;c[ga>>2]=9;if(up(ga,i,j,k)|0)hp(J,c[ga>>2]|0);o=0;R=0;H=0;break c}while(0);h=nh(12,1)|0;if(h|s^1){o=h;R=0;H=h;break}if(!(B|(m|(nh(18,1)|0)^1))){hp(J,65546);wp(J);o=0;R=0;H=0;break}if(!s){o=0;R=0;H=0;break}if(!(B|(m|(nh(17,1)|0)^1))){hp(J,65547);wp(J);o=0;R=0;H=0;break}if(nh(13,1)|0){rp(J);a[la+10276>>0]=1;o=0;R=0;H=0;break}do if(!na){if(m|(nh(16,1)|0)^1?!(nh(14,1)|0):0)break;if(ma?!(vp(J)|0):0)break;h=nh(16,1)|0;do if(h){if(vp(J)|0)break;rp(J)}while(0);if(c[la+180>>2]|0){if(vp(J)|0)m=Yo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else m=0;if(vp(J)|0)o=Zo(c[la+7056>>2]|0,c[la+7060>>2]|0)|0;else o=c[la+7040>>2]|0;G=la+7024|0;pg(G,o-m<<2|1);R=la+7032|0;H=c[la+7008>>2]|0;Jf(c[R>>2]|0,c[G>>2]|0,H+(m<<1)|0,H+(o<<1)|0)|0;th(c[R>>2]|0)}if(!h){o=0;R=0;H=0;break c}a[la+10276>>0]=1;xp(J,la+7052|0);o=0;R=0;H=0;break c}while(0);if(m|(nh(15,1)|0)^1){o=0;R=0;H=0;break}m=sh()|0;if(!m){o=0;R=0;H=0;break}s=Bf(((c8(m)|0)<<1)+2|0)|0;do if(!(a[m>>0]|0))b[s>>1]=0;else{h=0;do{m=m+(Hf(ga,m,0)|0)|0;o=c[ga>>2]|0;if(!o){E=177;break}do if(o>>>0<=65535){if(!(up(ga,i,j,k)|0))break;b[s+(h<<1)>>1]=c[ga>>2];h=h+1|0}while(0)}while((a[m>>0]|0)!=0);b[s+(h<<1)>>1]=0;if((h|0)<=0)break;yp(J,la+7052|0,s,h);a[la+10276>>0]=1}while(0);_f(s);o=0;R=0;H=0}else{o=0;R=0;H=w}while(0);if((c[K>>2]|0)==(Q|0)){m=o^1;s=ea^1;if(s|m)h=0;else{zf(e,c[la+7020>>2]|0,f);h=1}if(m|R^1){if(!o)E=187}else if(i&32)E=187;do if((E|0)==187){if(ea){G=la+7024|0;pg(G,c[la+7e3>>2]<<2);Jf(c[la+7032>>2]|0,c[G>>2]|0,c[la+7008>>2]|0,0)|0}d:do if(i&448|0){if(!j)Cb(8420,4833,8732,8201);if(D?nh(0,1)|0:0){m=64;o=0}else E=194;do if((E|0)==194){if(C){if(nh(3,1)|0){m=128;o=3;break}if(nh(4,1)|0){m=128;o=4;break}}if(!(i&256))break d;else{m=256;o=19}}while(0);t=ga;u=t+48|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[ga>>2]=m;A=ga+4|0;c[A>>2]=i;c[ga+8>>2]=k;a[ga+12>>0]=s&1;c[ga+16>>2]=o;ra=la+7032|0;B=ga+20|0;c[B>>2]=c[ra>>2];E=la+7036|0;F=ga+24|0;c[F>>2]=c[E>>2];m=la+7044|0;o=ga+28|0;c[o>>2]=c[m>>2];C=ga+32|0;a[C>>0]=0;G=la+7008|0;k=c[G>>2]|0;u=la+7052|0;v=Lf(k,k+(c[u>>2]<<1)|0)|0;s=ga+36|0;c[s>>2]=v;x=la+7056|0;y=Lf(k,k+(c[x>>2]<<1)|0)|0;w=ga+40|0;c[w>>2]=y;D=la+7060|0;k=Lf(k,k+(c[D>>2]<<1)|0)|0;z=ga+44|0;c[z>>2]=k;Cd[j&63](ga)|0;t=c[B>>2]|0;if((t|0)!=(c[ra>>2]|0))Cb(8435,4833,8780,8201);if((c[o>>2]|0)!=(c[m>>2]|0))Cb(8487,4833,8781,8201);if((c[A>>2]|0)!=(i|0))Cb(8532,4833,8782,8201);m=c[s>>2]|0;if((m|0)!=(v|0))c[u>>2]=If(t,t+m|0)|0;m=c[w>>2]|0;if((m|0)!=(y|0)){ra=c[B>>2]|0;c[x>>2]=If(ra,ra+m|0)|0}m=c[z>>2]|0;if((m|0)!=(k|0)){ra=c[B>>2]|0;c[D>>2]=If(ra,ra+m|0)|0}do if(a[C>>0]|0){ra=c[F>>2]|0;m=c[B>>2]|0;if((ra|0)==(c8(m)|0)){c[la+7040>>2]=pf(c[G>>2]|0,c[la+7e3>>2]|0,m,0,0)|0;c[E>>2]=c[F>>2];jp(J);break}else Cb(8561,4833,8788,8201)}while(0)}while(0);if(!ea)break;m=c[la+7032>>2]|0;if(!(S8(m,e)|0))break;zf(e,m,f);h=1}while(0);k=(h&1)!=0}else k=0;do if(H){if((c[K>>2]|0)!=(Q|0))break;$g()}while(0);if((c[K>>2]|0)!=(Q|0)|ea^1)D=e;else D=c[la+7032>>2]|0;if(!ma){ra=P;e=c[ra+4>>2]|0;f=L;c[f>>2]=c[ra>>2];c[f+4>>2]=e;f=$;e=c[f+4>>2]|0;ra=M;c[ra>>2]=c[f>>2];c[ra+4>>2]=e;ra=Rf(7,1.0)|0;I=+g[la+5152>>2];c[pa>>2]=c[L>>2];c[pa+4>>2]=c[L+4>>2];c[ga>>2]=c[M>>2];c[ga+4>>2]=c[M+4>>2];dj(pa,ga,ra,1,I)}p=+g[P>>2];C=P+4|0;q=+g[C>>2];r=+g[O>>2];I=+g[O+4>>2];Of(pa,p,q,p+r,q+I);if(ma){O=V+216|0;P=c[O+4>>2]|0;ra=ha;c[ra>>2]=c[O>>2];c[ra+4>>2]=P}else tf(ha,P,N);df(ia,0.0,0.0);if((c[J>>2]|0)!=(Q|0)|ma^1)h=0;else{h=c[K>>2]|0;h=(h|0)==(Yg(V,7052,0)|0)}if(h|(c[K>>2]|0)==(Q|0)){B=la+10272|0;g[B>>2]=+g[la+12>>2]+ +g[B>>2];z=c[la+7008>>2]|0;bf(ga);bf(ja);v=z+(c[la+7052>>2]<<1)|0;x=la+7056|0;h=c[x>>2]|0;y=la+7060|0;m=c[y>>2]|0;if((h|0)==(m|0)){o=1;w=0;h=-999}else{o=2;w=z+((Yo(h,m)|0)<<1)|0;h=-1}u=z;m=0;o=o+(S>>>20)|0;s=-1;e:while(1){f:do switch(b[u>>1]|0){case 0:break e;case 10:{t=m+1|0;if(!((s|0)!=-1|u>>>0>>0))if((o|0)<2){m=t;s=t;break e}else{o=o+-1|0;s=t}if((h|0)!=-1|u>>>0>>0){m=t;break f}if((o|0)<2){m=t;h=t;break e}else{m=t;o=o+-1|0;h=t}break}default:{}}while(0);u=u+2|0}m=m+1|0;h=(h|0)==-1?m:h;zp(T,Df(v,z)|0,v,0,0);c[ga>>2]=c[T>>2];A=la+5932|0;n=+g[A>>2];o=ga+4|0;g[o>>2]=n*+(((s|0)==-1?m:s)|0);if((h|0)>-1){zp(U,Df(w,z)|0,w,0,0);c[ja>>2]=c[U>>2];n=+g[A>>2];g[ja+4>>2]=n*+(h|0)}if(ma){df(aa,r,n*+(m|0));T=aa;U=c[T+4>>2]|0;ra=ia;c[ra>>2]=c[T>>2];c[ra+4>>2]=U}m=la+10276|0;do if(!(a[m>>0]|0))n=+g[la+7048>>2];else{do if(!(i&4096)){q=r*.25;p=+g[ga>>2];h=la+7048|0;n=+g[h>>2];if(p=n))break;n=q+p}n=+(~~n|0);g[h>>2]=n}else{g[la+7048>>2]=0.0;n=0.0}while(0);if(!ma)break;h=V+108|0;r=+g[h>>2];p=+g[o>>2];q=p-+g[A>>2];do if(q=r)){p=r;break}}while(0);ra=V+220|0;I=+g[ra>>2]+(r-p);g[ra>>2]=I;g[h>>2]=p;g[ha+4>>2]=I}while(0);a[m>>0]=0;df(aa,n,0.0);m=c[x>>2]|0;h=c[y>>2]|0;if((m|0)!=(h|0)){U=Yo(m,h)|0;o=z+(U<<1)|0;ra=Zo(m,h)|0;s=z+(ra<<1)|0;q=ma?0.0:-1.0;r=ma?0.0:2.0;t=Rf(40,1.0)|0;tf(ca,ha,ja);rf(ba,ca,aa);c[ca>>2]=o;u=ba+4|0;g:do if((U|0)<(ra|0)){v=pa+12|0;w=pa+4|0;x=V+596|0;y=W+8|0;z=la+5928|0;p=+g[A>>2];n=+g[u>>2];h=o;do{if(n>+g[v>>2]+p)break g;h:do if(n<+g[w>>2])while(1){if(h>>>0>=s>>>0)break h;m=h+2|0;c[ca>>2]=m;if((b[h>>1]|0)==10){h=m;break}else h=m}else{zp(da,h,s,ca,1);if(+g[da>>2]<=0.0)g[da>>2]=+(~~(+Ap(c[z>>2]|0,32)*.5)|0);df(Y,0.0,q-+g[A>>2]);tf(X,ba,Y);df(_,+g[da>>2],r);tf(Z,ba,_);lj(W,X,Z);Ki(X,pa);mj(W,X);Ki(X,pa);if(lh(W,X)|0)Qv(c[x>>2]|0,W,y,t,0.0,15);n=+g[u>>2];p=+g[A>>2];h=c[ca>>2]|0}while(0);g[ba>>2]=+g[ha>>2]-+g[aa>>2];n=p+n;g[u>>2]=n}while(h>>>0>>0)}while(0)}o=V+596|0;Z=c[o>>2]|0;_=c[la+5928>>2]|0;I=+g[A>>2];rf(ba,ha,aa);ra=Rf(0,1.0)|0;Zv(Z,_,I,ba,ra,D,D+(c[la+7036>>2]|0)|0,0.0,ma?0:pa);do if(!(a[la+169>>0]|0))m=1;else{n=+g[B>>2];if(n<=0.0){m=1;break}m=+i9(n,1.2000000476837158)<=.800000011920929}while(0);tf(ca,ha,ga);rf(ba,ca,aa);r=+g[ba>>2];h=ba+4|0;I=+g[h>>2];al(ca,r,I-+g[A>>2]+.5,r+1.0,I+-1.5);do if(m){Ki(da,pa);if(!(lh(ca,da)|0))break;ra=c[o>>2]|0;ol(da,ca);Ov(ra,ca,da,Rf(0,1.0)|0,1.0)}while(0);if(ea){df(da,+g[ba>>2]+-1.0,+g[h>>2]-+g[A>>2]);ea=da;pa=c[ea+4>>2]|0;ra=la+10436|0;c[ra>>2]=c[ea>>2];c[ra+4>>2]=pa}}else{c[ga>>2]=0;if(ma){I=+(Bp(D,ga)|0);h=la+5932|0;df(ja,r,+g[h>>2]*I);ea=ja;ra=c[ea+4>>2]|0;m=ia;c[m>>2]=c[ea>>2];c[m+4>>2]=ra;m=c[ga>>2]|0}else{h=la+5932|0;m=0}da=c[V+596>>2]|0;ea=c[la+5928>>2]|0;I=+g[h>>2];ra=Rf(0,1.0)|0;Zv(da,ea,I,ha,ra,D,m,0.0,ma?0:pa)}if(ma){df(ja,0.0,+g[la+5932>>2]);tf(ga,ia,ja);Cp(ga);Ek();Do()}do if(na)Rl();else{if(!(a[la+10480>>0]|0))break;$i(ha,D,0)}while(0);if(+g[oa>>2]>0.0){df(ka,+g[$>>2]+ +g[la+5168>>2],+g[C>>2]+ +g[fa>>2]);c[ga>>2]=c[ka>>2];c[ga+4>>2]=c[ka+4>>2];_i(ga,d,0,1)}h=(i&32|0)==0?k:R}}else h=0;l=qa;return h|0}function po(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,m=0,n=0,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=l;l=l+64|0;p=z+48|0;o=z+40|0;t=z+32|0;v=z+24|0;u=z+16|0;s=z+8|0;r=z;x=z+56|0;w=z+52|0;while(1){m=a[b>>0]|0;if(Bq(m<<24>>24)|0)b=b+1|0;else break}switch(m<<24>>24){case 47:case 42:case 43:{do{b=b+1|0;k=a[b>>0]|0}while(Bq(k<<24>>24)|0);q=m;n=b;b=k;break}default:{q=0;n=b;b=m}}a:do if(!(b<<24>>24))b=0;else switch(e|0){case 0:{b=(h|0)==0?8680:h;k=c[f>>2]|0;c[x>>2]=k;b:do if(q<<24>>24){c[r>>2]=x;if((y9(d,b,r)|0)<1)b=0;else{g[w>>2]=0.0;switch(q<<24>>24){case 43:{c[s>>2]=w;if((y9(n,8665,s)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]+ +(c[x>>2]|0));y=19;break b}case 42:{c[u>>2]=w;if((y9(n,8665,u)|0)!=1){y=19;break b}c[f>>2]=~~(+g[w>>2]*+(c[x>>2]|0));y=19;break b}case 47:{c[v>>2]=w;y=(y9(n,8665,v)|0)==1;i=+g[w>>2];if(!(y&i!=0.0)){y=19;break b}c[f>>2]=~~(+(c[x>>2]|0)/i);y=19;break b}default:{y=17;break b}}}}else{g[w>>2]=0.0;y=17}while(0);if((y|0)==17){c[t>>2]=x;if((y9(n,b,t)|0)==1){c[f>>2]=c[x>>2];y=19}else y=19}if((y|0)==19)b=(k|0)!=(c[f>>2]|0);break a}case 1:{j=+g[f>>2];g[x>>2]=j;if(q<<24>>24!=0?(c[o>>2]=x,(y9(d,8665,o)|0)<1):0)b=0;else{g[w>>2]=0.0;c[p>>2]=w;if((y9(n,8665,p)|0)<1)b=0;else{c:do switch(q<<24>>24){case 43:{i=+g[x>>2]+ +g[w>>2];y=31;break}case 42:{i=+g[x>>2]*+g[w>>2];y=31;break}default:{i=+g[w>>2];if(q<<24>>24==47)if(i!=0.0){i=+g[x>>2]/i;y=31;break c}else{i=+g[f>>2];break c}else y=31}}while(0);if((y|0)==31)g[f>>2]=i;b=j!=i}}break a}default:{b=0;break a}}while(0);l=z;return b|0}function qo(a){a=a|0;return c[a+8>>2]|0}function ro(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+16|0;g=h;c[g>>2]=d;b=e8(b,37)|0;a:do if(b){f=b;while(1){b=f+1|0;e=a[b>>0]|0;if(e<<24>>24!=37)break;f=e8(f+2|0,37)|0;if(!f)break a}if((e+-48&255)<10)do{b=b+1|0;e=a[b>>0]|0}while((e+-48&255)<10);if(e<<24>>24==46){b=so(b+1|0,g)|0;e=c[g>>2]|0;if(e>>>0>10)c[g>>2]=d;else d=e}switch(a[b>>0]|0){case 69:case 101:break;default:break a}c[g>>2]=-1;d=-1}while(0);l=h;return d|0}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=(a[b>>0]|0)==45;b=g?b+1|0:b;b=(a[b>>0]|0)==43?b+1|0:b;f=a[b>>0]|0;if((f+-48&255)<10){e=0;do{b=b+1|0;e=(e*10|0)+-48+(f<<24>>24)|0;f=a[b>>0]|0}while((f+-48&255)<10)}else e=0;c[d>>2]=g?0-e|0:e;return b|0}function to(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0;if((b|0)>=0){d=+uo(b);e=+B(+a);c=+i9(e,d);c=e+((!(c<=d*.5)?d:-0.0)-c);a=a<0.0?-c:c}return +a}function uo(a){a=a|0;var b=0.0;if(a>>>0<10)b=+g[1288+(a<<2)>>2];else b=+D(10.0,+(+(0-a|0)));return +b}function vo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,E=0,F=0,G=0.0;F=l;l=l+64|0;E=F+48|0;C=F+32|0;u=F+8|0;v=F;w=F+24|0;x=F+16|0;y=c[244]|0;z=Ii()|0;t=b;r=c[t+4>>2]|0;A=u;c[A>>2]=c[t>>2];c[A+4>>2]=r;A=b+8|0;r=A;t=c[r+4>>2]|0;q=v;c[q>>2]=c[r>>2];c[q+4>>2]=t;q=Rf(7,1.0)|0;s=+g[y+5152>>2];c[C>>2]=c[u>>2];c[C+4>>2]=c[u+4>>2];c[E>>2]=c[v>>2];c[E+4>>2]=c[v+4>>2];dj(C,E,q,1,s);q=i<.9999899864196777|i>1.0000100135803223;v=(k&1|0)==0;if(v)m=+Dl(b);else m=+$h(b);n=m+-4.0;if(!j)m=+vg(n/((f>2]);else m=+g[y+5200>>2];s=+yf(m,n);m=n-s;r=b+4|0;s=s*.5;o=s+((v?+g[b>>2]:+g[r>>2])+2.0);t=b+12|0;p=(v?+g[A>>2]:+g[t>>2])+-2.0-s;if(f*h<0.0){n=1.0/i;G=+D(+(+B(+(0.0-f))),+n);n=G/(G+ +D(+(+B(+h)),+n))}else n=f<0.0?1.0:0.0;u=y+6172|0;do if((c[u>>2]|0)==(d|0)){if(!(a[y+212>>0]|0)){$g();k=0;break}if(m>0.0)m=+Wh((+g[(v?y+204|0:y+208|0)>>2]-o)/m,0.0,1.0);else m=0.0;m=v?m:1.0-m;do if(q)if(m9.999999974752427e-07;m=+D(+(q?(m-n)/(1.0-n):m),+i);m=+yl(+vg(f,0.0),h,m);break}else m=+yl(f,h,m);while(0);m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;k=1}else k=0}else k=0;while(0);m=+wo(+g[e>>2],f,h,i,n);m=+yl(o,p,v?m:1.0-m);Eg(E);if(v){df(w,m-s,+g[r>>2]+2.0);df(x,s+m,+g[t>>2]+-2.0);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}else{df(w,+g[b>>2]+2.0,m-s);df(x,+g[A>>2]+-2.0,s+m);lj(C,w,x);c[E>>2]=c[C>>2];c[E+4>>2]=c[C+4>>2];c[E+8>>2]=c[C+8>>2];c[E+12>>2]=c[C+12>>2]}A=c[z+596>>2]|0;C=Rf((c[u>>2]|0)==(d|0)?20:19,1.0)|0;Qv(A,E,E+8|0,C,+g[y+5204>>2],15);l=F;return k|0}function wo(a,b,c,d,e){a=+a;b=+b;c=+c;d=+d;e=+e;do if(!(b==c)){if(b1.0000100135803223)){a=(a-b)/(c-b);break}if(a<0.0){a=(1.0-+D(+(1.0-(a-b)/(+yf(0.0,c)-b)),+(1.0/d)))*e;break}else{b=+vg(0.0,b);a=(1.0-e)*+D(+((a-b)/(c-b)),+(1.0/d))+e;break}}else a=0.0;while(0);return +a}function xo(b,d,e,f,i,j){b=b|0;d=d|0;e=+e;f=+f;i=i|0;j=+j;var k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+128|0;s=A;x=A+120|0;y=A+104|0;q=A+88|0;z=A+24|0;k=A+8|0;t=A+16|0;o=Ii()|0;if(!(a[o+144>>0]|0)){u=c[244]|0;p=Kg(o,b,0)|0;m=+Kl();cj(x,b,0,1,-1.0);w=o+216|0;v=u+5148|0;df(z,m,+g[x+4>>2]+ +g[v>>2]*2.0);tf(q,w,z);lj(y,w,q);w=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[u+5168>>2];else m=0.0;df(k,m,0.0);tf(z,w,k);lj(q,y,z);a:do if(fh(q,p)|0){n=kh(y,p)|0;i=(i|0)==0?7910:i;k=ro(i,3)|0;do if(mh(o,p,1)|0){_g(p,o);Qh(o);r=11}else{if((n?a[u+876>>0]|0:0)?(_g(p,o),Qh(o),a[u+225>>0]|0):0){r=11;break}if((c[u+6172>>2]|0)==(p|0)?(c[u+10364>>2]|0)==(p|0):0)break;dh(q,+g[v>>2]);k=vo(y,p,d,e,f,j,k,0)|0;h[s>>3]=+g[d>>2];d=z+(Ef(z,64,i,s)|0)|0;df(s,.5,.5);bj(y,w,z,d,0,s,0);if(+g[x>>2]>0.0){df(t,+g[w>>2]+ +g[u+5168>>2],+g[y+4>>2]+ +g[v>>2]);c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];_i(s,b,0,1)}break a}while(0);if((r|0)==11)c[u+10364>>2]=0;k=mo(y,b,1,d,p,k)|0}else{dh(q,+g[v>>2]);k=0}while(0)}else k=0;l=A;return k|0}function yo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;i=+i;j=j|0;k=+k;var m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+128|0;s=z;x=z+120|0;y=z+104|0;n=z+88|0;t=z+16|0;u=z+8|0;v=z+80|0;p=Ii()|0;if(!(a[p+144>>0]|0)){w=c[244]|0;q=Kg(p,b,0)|0;cj(x,b,0,1,-1.0);r=p+216|0;tf(n,r,d);lj(y,r,n);r=y+8|0;m=+g[x>>2];if(m>0.0)m=m+ +g[w+5168>>2];else m=0.0;df(u,m,0.0);tf(t,r,u);lj(n,y,t);o=w+5148|0;dh(n,+g[o>>2]);if(fh(y,q)|0){n=kh(y,q)|0;j=(j|0)==0?7910:j;d=ro(j,3)|0;if(n?a[w+876>>0]|0:0){_g(q,p);Qh(p)}d=vo(y,q,e,f,i,k,d,1)|0;h[s>>3]=+g[e>>2];e=t+(Ef(t,64,j,s)|0)|0;j=y+4|0;df(s,+g[y>>2],+g[j>>2]+ +g[o>>2]);df(u,.5,0.0);bj(s,r,t,e,0,u,0);if(+g[x>>2]>0.0){df(v,+g[r>>2]+ +g[w+5168>>2],+g[j>>2]+ +g[o>>2]);c[s>>2]=c[v>>2];c[s+4>>2]=c[v+4>>2];_i(s,b,0,1)}}else d=0}else d=0;l=z;return d|0}function zo(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0,f=0;e=l;l=l+16|0;f=e;g[f>>2]=+g[b>>2]*360.0/6.2831854820251465;a=xo(a,f,c,d,7915,1.0)|0;g[b>>2]=+g[f>>2]*6.2831854820251465/360.0;l=e;return a|0}function Ao(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[d>>2]|0);h=yo(a,b,j,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[d>>2]=~~+g[j>>2];l=i;return h|0}function Bo(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(xo(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Co(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0,l=0;d=Ii()|0;i=d+216|0;l=d+368|0;ul(l,(c[l>>2]|0)+1|0);l=lq(l)|0;k=i;e=c[k+4>>2]|0;f=l;c[f>>2]=c[k>>2];c[f+4>>2]=e;f=d+240|0;e=f;k=c[e+4>>2]|0;h=l+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=k;h=d+404|0;c[l+16>>2]=c[h>>2];k=d+408|0;c[l+20>>2]=c[k>>2];e=d+248|0;c[l+24>>2]=c[e>>2];c[l+28>>2]=c[d+252>>2];b=d+264|0;c[l+32>>2]=c[b>>2];a[l+36>>0]=a[(c[244]|0)+6184>>0]|0;a[l+37>>0]=1;j=+g[i>>2]-+g[d+20>>2]-+g[d+412>>2];g[k>>2]=j;g[h>>2]=j;h=c[i+4>>2]|0;c[f>>2]=c[i>>2];c[f+4>>2]=h;g[e>>2]=0.0;g[b>>2]=+g[d+220>>2]+-9999.0;return}function Do(){var b=0,d=0,e=0,f=0,h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+32|0;b=p+8|0;d=p;e=c[244]|0;f=Ii()|0;h=f+368|0;if(Nq(h)|0)Cb(9808,4833,10729,31422);n=lq(h)|0;i=f+240|0;lj(b,n,i);q=b+8|0;$k(d,b,q);m=d;k=c[m+4>>2]|0;c[q>>2]=c[m>>2];c[q+4>>2]=k;q=n;k=c[q+4>>2]|0;m=f+216|0;c[m>>2]=c[q>>2];c[m+4>>2]=k;$k(d,n+8|0,i);m=d;k=c[m+4>>2]|0;c[i>>2]=c[m>>2];c[i+4>>2]=k;c[f+248>>2]=c[n+24>>2];i=n+28|0;k=c[i>>2]|0;m=f+252|0;c[m>>2]=k;c[f+404>>2]=c[n+16>>2];c[f+408>>2]=c[n+20>>2];g[f+264>>2]=+g[f+220>>2]+-9999.0;if(a[n+37>>0]|0){g[m>>2]=+vg(+g[f+260>>2],(c[j>>2]=k,+g[j>>2]));eh(d,b);bh(d,+g[i>>2]);fh(b,0)|0}if((((a[n+36>>0]|0)==0?a[e+6184>>0]|0:0)?(o=c[e+6172>>2]|0,o|0):0)?(c[(c[e+6196>>2]|0)+604>>2]|0)==(c[f+604>>2]|0):0)c[f+272>>2]=o;q=f+276|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];Rq(h);l=p;return}function Eo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,2,c,d,e,f)|0}function Fo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,3,c,d,e,f)|0}function Go(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return Bo(a,b,4,c,d,e,f)|0}function Ho(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0;if(!(a[(Ii()|0)+144>>0]|0)){j=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){l=j+5168|0;j=0;k=0;do{fo(k);j=j|(On(7929,d+(k<<2)|0,f,h,i)|0);ch(0.0,+g[l>>2]);kl();mg();k=k+1|0}while((k|0)!=(e|0))}else j=0;kl();on(b,Yi(b,0)|0);Do()}else j=0;return j|0}function Io(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,2,c,d,e)|0}function Jo(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,3,c,d,e)|0}function Ko(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Ho(a,b,4,c,d,e)|0}function Lo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0,C=0;y=l;l=l+32|0;u=y+16|0;t=y+24|0;r=y+8|0;s=y;w=c[244]|0;p=w+6172|0;if((c[p>>2]|0)==(d|0))q=9;else q=(c[w+6156>>2]|0)==(d|0)?8:7;q=Rf(q,1.0)|0;C=b;z=c[C+4>>2]|0;A=r;c[A>>2]=c[C>>2];c[A+4>>2]=z;A=b+8|0;z=c[A+4>>2]|0;b=s;c[b>>2]=c[A>>2];c[b+4>>2]=z;o=+g[w+5152>>2];c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[u>>2]=c[s>>2];c[u+4>>2]=c[s+4>>2];dj(t,u,q,1,o);do if((c[p>>2]|0)==(d|0)){if(!(a[w+212>>0]|0)){$g();b=0;break}if(a[w+6185>>0]|0){c[w+10388>>2]=c[e>>2];df(u,0.0,0.0);z=u;A=c[z+4>>2]|0;C=w+10392|0;c[C>>2]=c[z>>2];c[C+4>>2]=A}if(f==0.0?(m=i-h,m!=0.0&m<3402823466385288598117041.0e14):0)f=m*+g[w+10400>>2];d=w+10388|0;m=+g[d>>2];Ej(u,0,1.0);o=+g[u>>2];b=w+10392|0;n=o-+g[b>>2];if((a[w+226>>0]|0)!=0?(v=+g[w+10408>>2],v>=0.0):0)n=n*v;if((a[w+227>>0]|0)!=0?(x=+g[w+10404>>2],x>=0.0):0)n=n*x;n=f*n;g[b>>2]=o;if(!(n!=n|0.0!=0.0|n==0.0)){if(+B(+(k+-1.0))>1.0000000474974513e-03){C=m>=0.0;x=C?1.0:-1.0;m=+D(+(C?m:-m),+(1.0/k))+x*n;C=m>=0.0;m=(C?1.0:-1.0)*(x*+D(+(C?m:-m),+k))}else m=m+n;if(h>2]=m}m=+to(m,j);if(+g[e>>2]!=m){g[e>>2]=m;b=1}else b=0}else b=0;while(0);l=y;return b|0}function Mo(b,d,e,f,i,j,k){b=b|0;d=d|0;e=+e;f=+f;i=+i;j=j|0;k=+k;var m=0,n=0.0,o=0,p=0,q=0,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=l;l=l+144|0;u=C;z=C+136|0;A=C+120|0;B=C+104|0;p=C+88|0;v=C+16|0;m=C+8|0;w=C+80|0;q=Ii()|0;if(!(a[q+144>>0]|0)){x=c[244]|0;r=Kg(q,b,0)|0;n=+Kl();cj(z,b,0,1,-1.0);y=q+216|0;o=x+5144|0;s=x+5148|0;df(p,n,+g[z+4>>2]+ +g[s>>2]*2.0);tf(B,y,p);lj(A,y,B);tf(p,A,o);y=A+8|0;rf(v,y,o);lj(B,p,v);n=+g[z>>2];if(n>0.0)n=n+ +g[x+5168>>2];else n=0.0;df(m,n,0.0);tf(v,y,m);lj(p,A,v);a:do if(fh(p,r)|0){o=kh(A,r)|0;j=(j|0)==0?7910:j;m=ro(j,3)|0;b:do if(mh(q,r,1)|0){_g(r,q);Qh(q);t=13}else{do if(o){if((a[x+876>>0]|0)==0?(a[x+881>>0]|0)==0:0)break;_g(r,q);Qh(q);if(a[x+225>>0]|0){t=13;break b}if(a[x+881>>0]|0){t=13;break b}}while(0);if((c[x+6172>>2]|0)==(r|0)?(c[x+10364>>2]|0)==(r|0):0)break;dh(p,+g[s>>2]);m=Lo(A,r,d,e,f,i,m,k)|0;h[u>>3]=+g[d>>2];d=v+(Ef(v,64,j,u)|0)|0;df(u,.5,.5);bj(A,y,v,d,0,u,0);if(+g[z>>2]>0.0){df(w,+g[y>>2]+ +g[x+5168>>2],+g[B+4>>2]);c[u>>2]=c[w>>2];c[u+4>>2]=c[w+4>>2];_i(u,b,0,1)}break a}while(0);if((t|0)==13)c[x+10364>>2]=0;m=mo(A,b,1,d,r,m)|0}else{dh(p,+g[s>>2]);m=0}while(0)}else m=0;l=C;return m|0}function No(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=+k;var l=0,m=0,n=0;if(!(a[(Ii()|0)+144>>0]|0)){l=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){n=l+5168|0;l=0;m=0;do{fo(m);l=l|(Mo(7929,d+(m<<2)|0,f,h,i,j,k)|0);ch(0.0,+g[n>>2]);kl();mg();m=m+1|0}while((m|0)!=(e|0))}else l=0;kl();on(b,Yi(b,0)|0);Do()}else l=0;return l|0}function Oo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,2,c,d,e,f,g)|0}function Po(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,3,c,d,e,f,g)|0}function Qo(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return No(a,b,4,c,d,e,f,g)|0}function Ro(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0,n=0.0,o=0,p=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);p=h>=i;n=+g[e>>2];if(!p)n=+yf(i,n);o=Mo(7933,d,f,p?-3402823466385288598117041.0e14:h,n,j,l)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);n=+g[d>>2];if(!p)n=+vg(h,n);k=o|(Mo(7939,e,f,n,p?3402823466385288598117041.0e14:i,k|0?k:j,l)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl();m=k}else m=0;return m|0}function So(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0,j=0;i=l;l=l+16|0;j=i;g[j>>2]=+(c[b>>2]|0);h=Mo(a,j,d,+(e|0),+(f|0),h|0?h:7924,1.0)|0;c[b>>2]=~~+g[j>>2];l=i;return h|0}function To(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if(!(a[(Ii()|0)+144>>0]|0)){k=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){m=k+5168|0;k=0;l=0;do{fo(l);k=k|(So(7929,d+(l<<2)|0,f,h,i,j)|0);ch(0.0,+g[m>>2]);kl();mg();l=l+1|0}while((l|0)!=(e|0))}else k=0;kl();on(b,Yi(b,0)|0);Do()}else k=0;return k|0}function Uo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,2,c,d,e,f)|0}function Vo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,3,c,d,e,f)|0}function Wo(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return To(a,b,4,c,d,e,f)|0}function Xo(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=+f;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0;if(!(a[(Ii()|0)+144>>0]|0)){m=c[244]|0;el(b);Co();Jl(2,0.0);o=(h|0)>=(i|0);l=c[e>>2]|0;if(!o)l=Yo(i,l)|0;n=So(7933,d,f,o?-2147483648:h,l,j)|0;mg();m=m+5168|0;ch(0.0,+g[m>>2]);l=c[d>>2]|0;if(!o)l=Zo(h,l)|0;l=n|(So(7939,e,f,l,o?2147483647:i,k|0?k:j)|0);mg();ch(0.0,+g[m>>2]);on(b,Yi(b,0)|0);Do();kl()}else l=0;return l|0}function Yo(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Zo(a,b){a=a|0;b=b|0;return ((a|0)>=(b|0)?a:b)|0}function _o(b,d,e,f,i,j,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;var p=0.0,q=0.0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0.0,E=0,F=0,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=l;l=l+176|0;H=R+96|0;Q=R+88|0;y=R+72|0;x=R+40|0;I=R+160|0;J=R+24|0;K=R+144|0;r=R+128|0;v=R+16|0;w=R+8|0;L=R+112|0;M=R+104|0;N=R;O=R+120|0;F=Ii()|0;if(!(a[F+144>>0]|0)){P=c[244]|0;cj(I,d,0,1,-1.0);p=+g[o>>2];if(p==0.0){p=+Kl();g[o>>2]=p}o=o+4|0;q=+g[o>>2];if(q==0.0){q=+g[I+4>>2]+ +g[P+5148>>2]*2.0;g[o>>2]=q}E=F+216|0;df(Q,p,q);tf(H,E,Q);lj(J,E,H);E=P+5144|0;tf(H,J,E);G=J+8|0;rf(Q,G,E);lj(K,H,Q);q=+g[I>>2];if(q>0.0)q=q+ +g[P+5168>>2];else q=0.0;df(Q,q,0.0);tf(H,G,Q);lj(r,J,H);E=P+5148|0;dh(r,+g[E>>2]);if(fh(r,0)|0){u=kh(K,0)|0;r=m==3402823466385288598117041.0e14;t=n==3402823466385288598117041.0e14;if(r|t){if((i|0)>0){q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14;o=0;do{D=+zd[e&15](f,o);q=+yf(q,D);s=+vg(s,D);o=o+1|0}while((o|0)!=(i|0))}else{q=3402823466385288598117041.0e14;s=-3402823466385288598117041.0e14}D=r?q:m;s=t?s:n}else{D=m;s=n}C=J;B=c[C+4>>2]|0;z=v;c[z>>2]=c[C>>2];c[z+4>>2]=B;z=G;B=c[z+4>>2]|0;C=w;c[C>>2]=c[z>>2];c[C+4>>2]=B;C=Rf(7,1.0)|0;A=+g[P+5152>>2];c[Q>>2]=c[v>>2];c[Q+4>>2]=c[v+4>>2];c[H>>2]=c[w>>2];c[H+4>>2]=c[w+4>>2];dj(Q,H,C,1,A);if((i|0)>0){C=(b|0)==0;t=C<<31>>31;B=(Yo(~~p,i)|0)+t|0;t=t+i|0;do if(u){A=+g[K>>2];o=~~(+Wh((+g[P+204>>2]-A)/(+g[K+8>>2]-A),0.0,.9998999834060669)*+(t|0));if(!((o|0)>-1&(o|0)<(i|0)))Cb(7945,4833,7889,7980);p=+zd[e&15](f,(o+j|0)%(i|0)|0);r=o+1|0;q=+zd[e&15](f,(r+j|0)%(i|0)|0);if(C){c[x>>2]=o;h[x+8>>3]=p;c[x+16>>2]=r;h[x+24>>3]=q;$j(7987,x);break}if((b|0)==1){c[y>>2]=o;h[y+8>>3]=p;$j(8007,y)}}else o=-1;while(0);n=1.0/+(B|0);A=s-D;df(H,0.0,1.0-+Qf((+zd[e&15](f,(j|0)%(i|0)|0)-D)/A));if(s*D<0.0)m=-D/A;else m=D<0.0?0.0:1.0;y=Rf(C?36:38,1.0)|0;z=Rf(C?37:39,1.0)|0;a:do if((B|0)>0){s=+(t|0);w=j+1|0;x=K+8|0;v=F+596|0;t=(b|0)==1;r=0;p=0.0;while(1){u=~~(p*s+.5);p=n+p;if(!((u|0)>-1&(u|0)<(i|0)))break;df(Q,p,1.0-+Qf((+zd[e&15](f,(w+u|0)%(i|0)|0)-D)/A));fl(L,K,x,H);if(!C){df(N,+g[Q>>2],m);fl(M,K,x,N);if(t){q=+g[M>>2];if(q>=+g[L>>2]+2.0)g[M>>2]=q+-1.0;Qv(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,0.0,15)}}else{j=Q;F=c[j+4>>2]|0;b=N;c[b>>2]=c[j>>2];c[b+4>>2]=F;fl(M,K,x,N);Ov(c[v>>2]|0,L,M,(o|0)==(u|0)?z:y,1.0)}j=Q;F=c[j+4>>2]|0;b=H;c[b>>2]=c[j>>2];c[b+4>>2]=F;r=r+1|0;if((r|0)>=(B|0))break a}Cb(8017,4833,7914,7980)}while(0)}if(k|0){df(H,+g[J>>2],+g[J+4>>2]+ +g[E>>2]);df(Q,.5,0.0);bj(H,G,k,0,0,Q,0)}if(+g[I>>2]>0.0){df(O,+g[G>>2]+ +g[P+5168>>2],+g[K+4>>2]);c[H>>2]=c[O>>2];c[H+4>>2]=c[O+4>>2];_i(H,d,0,1)}}}l=R;return}function $o(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(0,a,b,d,e,f,g,h,i,m);l=k;return}function ap(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+8|0;n=k;p=j;o=c[p+4>>2]|0;j=n;c[j>>2]=c[p>>2];c[j+4>>2]=o;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];_o(1,a,b,d,e,f,g,h,i,m);l=k;return}function bp(b,d,e){b=+b;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;v=l;l=l+128|0;u=v+112|0;n=v+80|0;o=v+48|0;f=v+40|0;r=v+24|0;s=v+72|0;i=v+16|0;k=v+8|0;m=v;t=v+64|0;p=v+56|0;j=Ii()|0;if((a[j+144>>0]|0)==0?(q=c[244]|0,A=j+216|0,y=c[A+4>>2]|0,z=f,c[z>>2]=c[A>>2],c[z+4>>2]=y,z=d,y=c[z+4>>2]|0,d=i,c[d>>2]=c[z>>2],c[d+4>>2]=y,x=+Kl(),d=q+5148|0,w=+g[q+5932>>2]+ +g[d>>2]*2.0,c[u>>2]=c[i>>2],c[u+4>>2]=c[i+4>>2],ph(s,u,x,w),tf(n,f,s),lj(r,f,n),dh(r,+g[d>>2]),fh(r,0)|0):0){b=+Qf(b);A=r;z=c[A+4>>2]|0;d=k;c[d>>2]=c[A>>2];c[d+4>>2]=z;d=r+8|0;z=d;A=c[z+4>>2]|0;y=m;c[y>>2]=c[z>>2];c[y+4>>2]=A;y=Rf(7,1.0)|0;A=q+5152|0;x=+g[A>>2];c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];dj(n,u,y,1,x);x=-+g[q+5156>>2];df(u,x,x);El(r,u);x=+yl(+g[r>>2],+g[d>>2],b);df(u,x,+g[r+12>>2]);y=c[j+596>>2]|0;z=Rf(38,1.0)|0;mz(y,r,z,0.0,b,+g[A>>2]);if(!e){h[o>>3]=b*100.0+.009999999776482582;Ef(n,32,8054,o)|0;e=n}cj(s,e,0,0,-1.0);b=+g[s>>2];if(b>0.0){x=+Wh(+g[u>>2]+ +g[q+5160>>2],+g[r>>2],+g[d>>2]-b-+g[q+5168>>2]);df(t,x,+g[r+4>>2]);df(p,0.0,.5);bj(t,d,e,0,s,p,r)}}l=v;return}function cp(b,d){b=b|0;d=d|0;var 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.0;x=l;l=l+144|0;w=x+120|0;v=x+112|0;p=x+104|0;q=x+40|0;i=x+88|0;r=x+16|0;s=x+72|0;t=x+64|0;j=x+56|0;u=x+32|0;k=x+8|0;m=x+80|0;n=x;e=Ii()|0;if(!(a[e+144>>0]|0)){o=c[244]|0;h=Kg(e,b,0)|0;cj(p,b,0,1,-1.0);e=e+216|0;f=o+5148|0;y=+g[p+4>>2]+ +g[f>>2]*2.0;df(v,y,y);tf(w,e,v);lj(q,e,w);dh(q,+g[f>>2]);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];if(+g[p>>2]>0.0)ch(0.0,+g[o+5168>>2]);df(v,0.0,+g[f>>2]);tf(w,e,v);df(j,0.0,+g[f>>2]);tf(t,e,j);tf(s,t,p);lj(r,w,s);if(+g[p>>2]>0.0){y=+Dl(r);df(w,y,+$h(q));bh(w,+g[f>>2]);cl(v,q,r);$k(s,q+8|0,r+8|0);lj(w,v,s);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[i+8>>2]=c[w+8>>2];c[i+12>>2]=c[w+12>>2]}if(fh(i,h)|0){e=hl(i,h,s,t,0)|0;if(e)a[d>>0]=a[d>>0]^1;j=q;i=c[j+4>>2]|0;h=u;c[h>>2]=c[j>>2];c[h+4>>2]=i;h=q+8|0;i=c[h+4>>2]|0;j=k;c[j>>2]=c[h>>2];c[j+4>>2]=i;s=a[s>>0]|0;t=Rf((a[t>>0]|0)==0|s<<24>>24==0?(s<<24>>24?8:7):9,1.0)|0;y=+g[o+5152>>2];c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[w>>2]=c[k>>2];c[w+4>>2]=c[k+4>>2];dj(v,w,t,1,y);if(a[d>>0]|0){y=+Dl(q);y=+vg(1.0,+(~~(+yf(y,+$h(q))/6.0)|0));df(v,y,y);tf(m,q,v);v=Rf(18,1.0)|0;y=+Dl(q)-y*2.0;c[w>>2]=c[m>>2];c[w+4>>2]=c[m+4>>2];hj(w,v,y)}if(a[o+10480>>0]|0)$i(r,a[d>>0]|0?8061:8065,0);if(+g[p>>2]>0.0){t=r;u=c[t+4>>2]|0;v=n;c[v>>2]=c[t>>2];c[v+4>>2]=u;c[w>>2]=c[n>>2];c[w+4>>2]=c[n+4>>2];_i(w,b,0,1)}}else e=0}else e=0;l=x;return e|0}function dp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h;a[f>>0]=(c[d>>2]&e|0)==(e|0)&1;g=cp(b,f)|0;if(g){if(!(a[f>>0]|0))b=c[d>>2]&~e;else b=c[d>>2]|e;c[d>>2]=b}l=h;return g|0}function ep(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=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.0;w=l;l=l+112|0;v=w+96|0;r=w+88|0;m=w+72|0;i=w+56|0;s=w+8|0;t=w+48|0;n=w+40|0;o=w+32|0;u=w+24|0;p=w;j=Ii()|0;if(!(a[j+144>>0]|0)){q=c[244]|0;h=Kg(j,b,0)|0;cj(r,b,0,1,-1.0);e=j+216|0;f=q+5148|0;k=+g[r+4>>2]+ +g[f>>2]*2.0+-1.0;df(i,k,k);tf(v,e,i);lj(m,e,v);dh(m,+g[f>>2]);c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];if(+g[r>>2]>0.0)ch(0.0,+g[q+5168>>2]);df(t,0.0,+g[f>>2]);tf(v,e,t);df(u,0.0,+g[f>>2]);tf(o,e,u);tf(n,o,r);lj(s,v,n);if(+g[r>>2]>0.0){k=+Dl(s);df(v,k,+$h(m));bh(v,+g[f>>2]);fp(i,s)}if(fh(i,h)|0){Dn(t,m);g[t>>2]=+(~~+g[t>>2]|0)+.5;e=t+4|0;g[e>>2]=+(~~+g[e>>2]|0)+.5;k=+$h(m)*.5;e=hl(i,h,n,o,0)|0;h=j+596|0;j=c[h>>2]|0;n=a[n>>0]|0;Xv(j,t,k,Rf((a[o>>0]|0)==0|n<<24>>24==0?(n<<24>>24?8:7):9,1.0)|0,16);if(d){x=+Dl(m);x=+vg(1.0,+(~~(+yf(x,+$h(m))/6.0)|0));o=c[h>>2]|0;Xv(o,t,k-x,Rf(18,1.0)|0,16)}f=q+5156|0;if(+g[f>>2]>0.0){n=c[h>>2]|0;df(u,1.0,1.0);tf(v,t,u);o=Rf(6,1.0)|0;Wv(n,v,k,o,16,+g[f>>2]);o=c[h>>2]|0;u=Rf(5,1.0)|0;Wv(o,t,k,u,16,+g[f>>2])}if(a[q+10480>>0]|0)$i(s,d?8069:8073,0);if(+g[r>>2]>0.0){t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;c[v>>2]=c[p>>2];c[v+4>>2]=c[p+4>>2];_i(v,b,0,1)}}else e=0}else e=0;l=w;return e|0}function fp(a,b){a=a|0;b=b|0;var c=0.0,d=0;c=+g[b>>2];if(+g[a>>2]>c)g[a>>2]=c;d=a+4|0;c=+g[b+4>>2];if(+g[d>>2]>c)g[d>>2]=c;d=a+8|0;c=+g[b+8>>2];if(+g[d>>2]>2]=c;d=a+12|0;c=+g[b+12>>2];if(+g[d>>2]>2]=c;return}function gp(a,b,d){a=a|0;b=b|0;d=d|0;a=ep(a,(c[b>>2]|0)==(d|0))|0;if(a)c[b>>2]=d;return a|0}function hp(b,c){b=b|0;c=c|0;ip(b,b+56|0,c);a[b+3280>>0]=1;jp(b);return}function ip(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+48|0;r=u+24|0;s=u;m=f+16|0;a:while(1){if((h|0)<65549)switch(h|0){case 65546:{t=15;break a}case 65547:{t=16;break a}case 65536:{t=17;break a}case 65537:{t=22;break a}case 65548:{t=29;break a}case 65544:{t=72;break a}case 65545:{t=77;break a}case 65542:{t=82;break a}case 65543:{t=83;break a}case 65540:{t=86;break a}case 65541:{t=92;break a}case 65539:{t=42;break}case 65538:{t=57;break}default:{t=3;break a}}else{if((h|0)>=196613){t=114;break}if((h|0)<196610){t=115;break}switch(h|0){case 196612:{t=98;break a}case 196611:{t=42;break}case 196610:{t=57;break}default:{t=3;break a}}}if((t|0)==42){h=h&131072;if(!(a[m>>0]|0)){t=43;break}h=h|65537;continue}else if((t|0)==57){h=h&131072;if(!(a[m>>0]|0)){t=58;break}h=h|65536;continue}}b:switch(t|0){case 15:{et(e,f);a[f+15>>0]=0;break}case 16:{ft(e,f);a[f+15>>0]=0;break}case 17:{if((c[f+4>>2]|0)==(c[f+8>>2]|0)){h=c[f>>2]|0;if((h|0)>0)c[f>>2]=h+-1}else gt(f);a[f+15>>0]=0;break}case 22:{if((c[f+4>>2]|0)==(c[f+8>>2]|0))c[f>>2]=(c[f>>2]|0)+1;else ht(e,f);it(e,f);a[f+15>>0]=0;break}case 29:if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=kt(e,c[f>>2]|0)|0;it(e,f);break}else{gt(f);break}case 43:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))ht(e,f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);h=c[r+16>>2]|0;if(h|0){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];i=(c[r+12>>2]|0)+h|0;c[f>>2]=i;nt(s,e,i);m=c[s+20>>2]|0;c:do if((m|0)>0){h=0;j=+g[s>>2];do{k=+ot(e,i,h);if(k==-1.0)break c;j=j+k;if(j>n)break c;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(m|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 58:{q=(h|0)!=0;if(!q){if((c[f+4>>2]|0)!=(c[f+8>>2]|0))gt(f)}else jt(f);it(e,f);mt(r,e,c[f>>2]|0,d[m>>0]|0);m=c[r+20>>2]|0;if((m|0)!=(c[r+12>>2]|0)){o=f+15|0;p=f+20|0;n=+g[(a[o>>0]|0?p:r)>>2];c[f>>2]=m;nt(s,e,m);i=c[s+20>>2]|0;d:do if((i|0)>0){j=+g[s>>2];h=0;do{k=+ot(e,m,h);if(k==-1.0)break d;j=j+k;if(j>n)break d;c[f>>2]=(c[f>>2]|0)+1;h=h+1|0}while((h|0)<(i|0))}while(0);it(e,f);a[o>>0]=1;g[p>>2]=n;if(q)c[f+8>>2]=c[f>>2]}break}case 82:{c[f+8>>2]=0;c[f+4>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break}case 83:{c[f>>2]=_s(e)|0;c[f+8>>2]=0;c[f+4>>2]=0;a[f+15>>0]=0;break}case 86:{it(e,f);gt(f);e:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)do{if((qt(e,h+-1|0)|0)<<16>>16==10)break e;s=c[f>>2]|0;h=s+-1|0;c[f>>2]=h}while((s|0)>1)}else c[f>>2]=0;while(0);a[f+15>>0]=0;break}case 92:{i=_s(e)|0;it(e,f);gt(f);f:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{if((qt(e,h)|0)<<16>>16==10)break f;h=(c[f>>2]|0)+1|0;c[f>>2]=h}while((h|0)<(i|0))}else c[f>>2]=i;while(0);a[f+15>>0]=0;break}case 98:{it(e,f);jt(f);g:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)>0)while(1){s=(qt(e,h+-1|0)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break g;i=h+-1|0;c[f>>2]=i;if((h|0)>1)h=i;else{h=i;break}}}else{c[f>>2]=0;h=0}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break}case 114:switch(h|0){case 196616:{t=72;break b}case 196617:{t=77;break b}case 196620:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=kt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196621:{h=f+8|0;if((c[f+4>>2]|0)==(c[h>>2]|0))jt(f);s=lt(e,c[f>>2]|0)|0;c[f>>2]=s;c[h>>2]=s;it(e,f);break b}case 196614:{jt(f);c[f+8>>2]=0;c[f>>2]=0;a[f+15>>0]=0;break b}case 196615:{jt(f);e=_s(e)|0;c[f+8>>2]=e;c[f>>2]=e;a[f+15>>0]=0;break b}case 196613:{i=_s(e)|0;it(e,f);jt(f);h:do if(!(a[m>>0]|0)){h=c[f>>2]|0;if((h|0)<(i|0))do{s=(qt(e,h)|0)<<16>>16==10;h=c[f>>2]|0;if(s)break h;h=h+1|0;c[f>>2]=h}while((h|0)<(i|0))}else{c[f>>2]=i;h=i}while(0);c[f+8>>2]=h;a[f+15>>0]=0;break b}default:{t=3;break b}}case 115:{if((h|0)<196608){switch(h|0){case 65549:break;default:{t=3;break b}}if((c[f+4>>2]|0)==(c[f+8>>2]|0)){c[f>>2]=lt(e,c[f>>2]|0)|0;it(e,f);break}else{ht(e,f);break}}switch(h|0){case 196608:break;case 196609:{jt(f);s=f+8|0;c[s>>2]=(c[s>>2]|0)+1;it(e,f);c[f>>2]=c[s>>2];a[f+15>>0]=0;break b}default:{t=3;break b}}it(e,f);jt(f);i=f+8|0;h=c[i>>2]|0;if((h|0)>0){h=h+-1|0;c[i>>2]=h}c[f>>2]=h;a[f+15>>0]=0;break}}do if((t|0)==3){h=Zs(h)|0;if((h|0)>0){b[r>>1]=h;if((h|0)==10?a[m>>0]|0:0)break;if(((a[f+12>>0]|0)!=0?(c[f+4>>2]|0)==(c[f+8>>2]|0):0)?(i=c[f>>2]|0,(i|0)<(_s(e)|0)):0){$s(e,f,i);at(e,c[f>>2]|0,1);if(bt(e,c[f>>2]|0,r,1)|0){c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}else t=11;if((t|0)==11?(ct(e,f),bt(e,c[f>>2]|0,r,1)|0):0){dt(f,c[f>>2]|0,1);c[f>>2]=(c[f>>2]|0)+1;a[f+15>>0]=0}}}else if((t|0)==72){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){t=_s(e)|0;h=c[f>>2]|0;if((h|0)<(t|0))pt(e,f,h,1)}else ct(e,f);a[f+15>>0]=0}else if((t|0)==77){if((c[f+4>>2]|0)==(c[f+8>>2]|0)){it(e,f);h=c[f>>2]|0;if((h|0)>0){pt(e,f,h+-1|0,1);c[f>>2]=(c[f>>2]|0)+-1}}else ct(e,f);a[f+15>>0]=0}while(0);l=u;return}function jp(a){a=a|0;g[a+3276>>2]=-.30000001192092896;return}function kp(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=b+24|0;if((e+d|0)>(c[j>>2]|0))Cb(8077,4833,8312,37777);f=(c[b+20>>2]|0)+d|0;g=f+e|0;h=a[g>>0]|0;if(h<<24>>24){i=f;while(1){g=g+1|0;f=i+1|0;a[i>>0]=h;h=a[g>>0]|0;if(!(h<<24>>24))break;else i=f}}a[f>>0]=0;g=b+36|0;f=c[g>>2]|0;if((f+e|0)<(d|0))if((f|0)<(d|0))d=f;else k=8;else{d=f-e|0;k=8}if((k|0)==8)c[g>>2]=d;c[b+44>>2]=d;c[b+40>>2]=d;a[b+32>>0]=1;c[j>>2]=(c[j>>2]|0)-e;return}function lp(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;if(!f)g=c8(e)|0;else g=f-e|0;h=b+24|0;f=c[h>>2]|0;if((g+1+f|0)<(c[b+28>>2]|0)){if((f|0)==(d|0))f=b+20|0;else{i=b+20|0;j=(c[i>>2]|0)+d|0;_aa(j+g|0,j|0,f-d|0)|0;f=i}Zaa((c[f>>2]|0)+d|0,e|0,g|0)|0;a[(c[f>>2]|0)+((c[h>>2]|0)+g)>>0]=0;e=b+36|0;f=c[e>>2]|0;if((f|0)>=(d|0)){f=f+g|0;c[e>>2]=f}c[b+44>>2]=f;c[b+40>>2]=f;a[b+32>>0]=1;c[h>>2]=(c[h>>2]|0)+g}return}function mp(a){a=a|0;return (c[a>>2]|0)==0|0}function np(a){a=a|0;return (c[a>>2]|0)==0|0}function op(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))zu(a,Au(a,b)|0);c[a>>2]=b;return}function pp(a){a=a|0;var b=0,d=0;d=a+56|0;b=c[a+44>>2]|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;d=a+60|0;c[d>>2]=Yo(c[d>>2]|0,b)|0;a=a+64|0;c[a>>2]=Yo(c[a>>2]|0,b)|0;return}function qp(a,b){a=a|0;b=b|0;Ct(a,b);return}function rp(b){b=b|0;var d=0;c[b+60>>2]=0;d=c[b+44>>2]|0;c[b+64>>2]=d;c[b+56>>2]=d;a[b+71>>0]=0;return}function sp(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;b=Dt(b,e,f)|0;c[d>>2]=b;c[d+4>>2]=b;c[d+8>>2]=b;a[d+15>>0]=0;return}function tp(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;a=Dt(a,d,e)|0;f=b+4|0;g=b+8|0;if((c[f>>2]|0)==(c[g>>2]|0))c[f>>2]=c[b>>2];c[g>>2]=a;c[b>>2]=a;return}function up(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;k=l;l=l+48|0;j=k;g=c[a>>2]|0;if(g>>>0<128&(g|0)!=32?(Y8(g&255)|0)==0:0)if((g+-57344|0)>>>0<6400?1:(((g|0)==9?d>>>10&1:0)|(d&1048576|0)!=0&(g|0)==10&1|0)==0)g=0;else h=5;else if((g+-57344|0)>>>0<6400)g=0;else h=5;a:do if((h|0)==5){if(d&15){h=g+-48|0;if((d&1|0)!=0&h>>>0>9)switch(g|0){case 42:case 43:case 45:case 46:case 47:break;default:{g=0;break a}}if(!(((g&-33)+-65|0)>>>0<6|((d&2|0)==0|h>>>0<10))){g=0;break}h=g+-32|0;if((d&4|0)!=0&(g+-97|0)>>>0<26){c[a>>2]=h;g=h}if((d&8|0)!=0?Bq(g)|0:0){g=0;break}}do if(d&512|0){h=j+12|0;i=h+36|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=512;h=j+14|0;b[h>>1]=g;c[j+4>>2]=d;c[j+8>>2]=f;if((Cd[e&63](j)|0)==0?(j=b[h>>1]|0,c[a>>2]=j&65535,j<<16>>16!=0):0)break;else{g=0;break a}}while(0);g=1}while(0);l=k;return g|0}function vp(a){a=a|0;return (c[a+60>>2]|0)!=(c[a+64>>2]|0)|0}function wp(a){a=a|0;var b=0;b=c[a+56>>2]|0;c[a+64>>2]=b;c[a+60>>2]=b;return}function xp(b,d){b=b|0;d=d|0;if((c[d+4>>2]|0)!=(c[d+8>>2]|0)){ct(b,d);a[d+15>>0]=0}return}function yp(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;it(d,e);ct(d,e);if(!(bt(d,c[e>>2]|0,f,g)|0)){d=e+3210|0;e=b[d>>1]|0;if(e<<16>>16)b[d>>1]=e+-1<<16>>16}else{dt(e,c[e>>2]|0,g);c[e>>2]=(c[e>>2]|0)+g;a[e+15>>0]=0}return}function zp(a,d,e,f,h){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0.0;o=c[244]|0;m=c[o+5928>>2]|0;p=+g[o+5932>>2];l=p/+g[m>>2];df(a,0.0,0.0);o=a+4|0;j=0.0;a:while(1){b:while(1){if(d>>>0>=e>>>0){n=7;break a}k=d+2|0;d=b[d>>1]|0;switch(d<<16>>16){case 13:{d=k;break}case 10:{n=6;break b}default:{n=5;break b}}}if((n|0)==5){j=j+l*+Ap(m,d);d=k;continue}else if((n|0)==6){n=0;i=+vg(+g[a>>2],j);g[a>>2]=i;g[o>>2]=p+ +g[o>>2];if(h){d=k;j=0.0;break}else{j=0.0;d=k;continue}}}if((n|0)==7)i=+g[a>>2];if(i>2]=j;i=+g[o>>2];if(j>0.0|i==0.0)g[o>>2]=p+i;if(f|0)c[f>>2]=d;return}function Ap(a,b){a=a|0;b=b|0;var d=0;b=b&65535;d=a+28|0;if((c[d>>2]|0)>(b|0))b=Et(d,b)|0;else b=a+56|0;return +(+g[b>>2])}function Bp(b,d){b=b|0;d=d|0;var e=0,f=0;f=0;a:while(1){b:while(1){e=b+1|0;switch(a[b>>0]|0){case 0:break a;case 10:break b;default:b=e}}f=f+1|0;b=e}c[d>>2]=b;return f+1|0}function Cp(b){b=b|0;var c=0,d=0,e=0,f=0;f=l;l=l+32|0;c=f+8|0;d=f;e=Ii()|0;if(!(a[e+144>>0]|0)){e=e+216|0;tf(d,e,b);lj(c,e,d);dh(c,0.0);fh(c,0)|0}l=f;return}function Dp(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 oo(a,b,c,d,e|1048576,f,g)|0}function Ep(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+96|0;o=t+24|0;s=t+16|0;n=t+8|0;k=t+32|0;p=t;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;cj(s,b,0,1,-1.0);Co();el(b);u=+Om();df(n,u,u);m=(f|0)!=0;if(m){u=+Kl();kg(+vg(1.0,u-(+g[n>>2]+ +g[r+5168>>2])*2.0))}Fp(d,e,i,k);if(lg(58608,k,64,j>>>1&1^1|j|16,0,0)|0)i=po(k,qo((c[244]|0)+7012|0)|0,d,e,i)|0;else i=0;if(m){mg();j=r+5168|0;ch(0.0,+g[j>>2]);if(zn(8661,n,129)|0){Gp(d,45,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}ch(0.0,+g[j>>2]);if(zn(8663,n,129)|0){Gp(d,43,e,(h|0)!=0&(a[r+225>>0]|0)!=0?h:f);i=1}}kl();if(+g[s>>2]>0.0){ch(0.0,+g[r+5168>>2]);r=r+5148|0;df(p,+g[q+216>>2],+g[q+220>>2]+ +g[r>>2]);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];_i(o,b,0,1);bh(s,+g[r>>2])}Do()}else i=0;l=t;return i|0}function Fp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0;j=l;l=l+16|0;i=j+8|0;f=j;switch(a|0){case 0:{c[f>>2]=c[b>>2];Ef(e,64,d,f)|0;break}case 1:{h[i>>3]=+g[b>>2];Ef(e,64,d,i)|0;break}default:{}}l=j;return}function Gp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a:do switch(a|0){case 0:switch(b|0){case 43:{c[d>>2]=(c[e>>2]|0)+(c[d>>2]|0);break a}case 45:{c[d>>2]=(c[d>>2]|0)-(c[e>>2]|0);break a}default:break a}case 1:switch(b|0){case 43:{g[d>>2]=+g[d>>2]+ +g[e>>2];break a}case 45:{g[d>>2]=+g[d>>2]-+g[e>>2];break a}default:break a}default:{}}while(0);return}function Hp(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o;k=o+8|0;m=o+4|0;n=o+16|0;g[k>>2]=e;g[m>>2]=f;if((h|0)<0){a[n>>0]=a[8665]|0;a[n+1>>0]=a[8666]|0;a[n+2>>0]=a[8667]|0}else{c[j>>2]=h;Ef(n,16,8668,j)|0;e=+g[k>>2];f=+g[m>>2]}n=Ep(b,1,d,e>0.0?k:0,f>0.0?m:0,n,i)|0;l=o;return n|0}function Ip(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+4|0;h=g;c[i>>2]=d;c[h>>2]=e;f=Ep(a,0,b,(d|0)>0?i:0,(e|0)>0?h:0,f&2|0?8675:8680,f)|0;l=g;return f|0}function Jp(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0;if(!(a[(Ii()|0)+144>>0]|0)){i=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){k=i+5168|0;i=0;j=0;do{fo(j);i=i|(Hp(7929,d+(j<<2)|0,0.0,0.0,f,h)|0);ch(0.0,+g[k>>2]);kl();mg();j=j+1|0}while((j|0)!=(e|0))}else i=0;kl();on(b,Yi(b,0)|0);Do()}else i=0;return i|0}function Kp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,2,c,d)|0}function Lp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,3,c,d)|0}function Mp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Jp(a,b,4,c,d)|0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;if(!(a[(Ii()|0)+144>>0]|0)){h=c[244]|0;Co();el(b);Jl(e,0.0);if((e|0)>0){j=h+5168|0;h=0;i=0;do{fo(i);h=h|(Ip(7929,d+(i<<2)|0,0,0,f)|0);ch(0.0,+g[j>>2]);kl();mg();i=i+1|0}while((i|0)!=(e|0))}else h=0;kl();on(b,Yi(b,0)|0);Do()}else h=0;return h|0}function Op(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,2,c)|0}function Pp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,3,c)|0}function Qp(a,b,c){a=a|0;b=b|0;c=c|0;return Np(a,b,4,c)|0}function Rp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0;K=l;l=l+176|0;F=K+152|0;E=K+136|0;D=K+40|0;x=K+128|0;I=K+16|0;j=K+104|0;y=K+161|0;k=K+160|0;z=K+64|0;p=K+32|0;m=K+8|0;q=K+120|0;r=K;s=K+96|0;t=K+88|0;G=K+56|0;B=K+80|0;H=K+48|0;J=c[244]|0;u=J+6344|0;v=(a[u>>0]|0)==0;a[u>>0]=0;f=Ii()|0;if(!(a[f+144>>0]|0)){w=Kg(f,b,0)|0;i=+Kl();cj(x,b,0,1,-1.0);o=f+216|0;C=J+5144|0;n=J+5148|0;df(E,i,+g[x+4>>2]+ +g[n>>2]*2.0);tf(F,o,E);lj(I,o,F);o=I+8|0;h=+g[x>>2];if(h>0.0)h=h+ +g[J+5168>>2];else h=0.0;df(E,h,0.0);tf(F,o,E);lj(j,I,F);dh(j,+g[n>>2]);if(fh(j,w)|0){j=hl(I,w,y,k,0)|0;k=gk(w)|0;L=+Om();df(E,L,0.0);rf(F,o,E);lj(z,I,F);f=I;M=c[f+4>>2]|0;N=p;c[N>>2]=c[f>>2];c[N+4>>2]=M;N=o;M=c[N+4>>2]|0;f=m;c[f>>2]=c[N>>2];c[f+4>>2]=M;f=Rf(7,1.0)|0;M=J+5152|0;h=+g[M>>2];c[E>>2]=c[p>>2];c[E+4>>2]=c[p+4>>2];c[F>>2]=c[m>>2];c[F+4>>2]=c[m+4>>2];dj(E,F,f,1,h);f=I+4|0;df(q,+g[o>>2]-L,+g[f>>2]);N=o;m=c[N+4>>2]|0;p=r;c[p>>2]=c[N>>2];c[p+4>>2]=m;y=Rf(k|(a[y>>0]&1)!=0?22:21,1.0)|0;h=+g[M>>2];c[E>>2]=c[q>>2];c[E+4>>2]=c[q+4>>2];c[F>>2]=c[r>>2];c[F+4>>2]=c[r+4>>2];dj(E,F,y,1,h);h=+g[n>>2];df(s,+g[o>>2]-L+h,h+ +g[f>>2]);c[F>>2]=c[s>>2];c[F+4>>2]=c[s+4>>2];fj(F,3,1.0);if(d|0){tf(F,I,C);df(E,0.0,0.0);bj(F,z+8|0,d,0,0,E,0)}if(+g[x>>2]>0.0){df(t,+g[o>>2]+ +g[J+5168>>2],+g[f>>2]+ +g[n>>2]);c[F>>2]=c[t>>2];c[F+4>>2]=c[t+4>>2];_i(F,b,0,1)}if(k|j^1)if(k)A=12;else f=0;else{bk(w,0);A=12}if((A|0)==12){if(v){f=(e&30|0)==0?e|4:e;if(!(Sp(f&30)|0))Cb(8683,4833,9219,32091);if(!(f&4))e=(f&2|0)==0?((f&8|0)==0?-1:20):4;else e=8;df(F,i,0.0);df(E,3402823466385288598117041.0e14,+Tp(e));Dm(F,E,0,0);e=f}else{a[u>>0]=1;N=J+6320|0;g[N>>2]=+vg(+g[N>>2],i)}c[D>>2]=c[J+6256>>2];Ef(E,16,8735,D)|0;f=Xj(E)|0;if(f|0){Yk(D,f);Zk(B,f,D);c[F>>2]=c[B>>2];c[F+4>>2]=c[B+4>>2];_k(G,f,F);f=f+180|0;if(e&1|0)c[f>>2]=0;ol(H,I);bl(F,H,G,f,I,1);df(H,0.0,0.0);pk(F,0,H)}if(!(hi(E,0,67109187)|0)){lk();Cb(16777,4833,9245,32091)}i=+g[C>>2];h=+g[J+5096>>2];if(i!=h)Up(i-h);f=1}}else f=0}else f=0;l=K;return f|0}function Sp(a){a=a|0;return (a|0)!=0&(a+-1&a|0)==0|0}function Tp(a){a=a|0;var b=0.0,d=0;d=c[244]|0;if((a|0)<1)b=3402823466385288598117041.0e14;else{b=+g[d+5164>>2];b=+g[d+5100>>2]*2.0+((+g[d+5932>>2]+b)*+(a|0)-b)}return +b}function Up(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=a+ +g[b>>2];g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Vp(){var a=0.0,b=0.0,d=0;d=c[244]|0;a=+g[d+5144>>2];b=+g[d+5096>>2];if(a!=b)Wp(a-b);lk();return}function Wp(a){a=+a;var b=0,d=0;b=c[244]|0;d=Ii()|0;if(!(a!=0.0))a=+g[b+5184>>2];b=d+404|0;a=+g[b>>2]-a;g[b>>2]=a;g[d+216>>2]=a+ +g[d+20>>2]+ +g[d+412>>2];return}function Xp(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;j=o+16|0;m=o+8|0;n=o;k=c[244]|0;c[j>>2]=0;i=c[d>>2]|0;if((i|0)>-1&(i|0)<(g|0))Od[e&63](f,i,j)|0;if((h|0)!=-1?(a[k+6344>>0]|0)==0:0){p=+Tp(h);df(m,0.0,0.0);df(n,3402823466385288598117041.0e14,p);Dm(m,n,0,0)}if(Rp(b,c[j>>2]|0,0)|0){if((g|0)>0){h=0;b=0;do{Gn(h);j=(h|0)==(c[d>>2]|0);if(Od[e&63](f,h,m)|0)i=c[m>>2]|0;else{c[m>>2]=8748;i=8748}df(n,0.0,0.0);if(Yp(i,j,0,n)|0){c[d>>2]=h;b=1}if(j)mn();kl();h=h+1|0}while((h|0)!=(g|0))}else b=0;Vp()}else b=0;l=o;return b|0}function Yp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0;G=l;l=l+128|0;F=G+112|0;E=G+104|0;C=G+96|0;p=G+88|0;q=G+32|0;D=G+72|0;h=G+64|0;k=G+48|0;m=G+56|0;u=G+16|0;t=G+121|0;v=G+120|0;w=G+8|0;x=G;y=G+40|0;z=Ii()|0;if(!(a[z+144>>0]|0)){A=c[244]|0;B=(e&2|0)!=0;if(B?c[z+416>>2]|0:0)Li();r=Kg(z,b,0)|0;cj(C,b,0,1,-1.0);n=f+4|0;df(p,+g[(+g[f>>2]!=0.0?f:C)>>2],+g[(+g[n>>2]!=0.0?f:C)+4>>2]);o=z+216|0;J=o;H=c[J+4>>2]|0;I=q;c[I>>2]=c[J>>2];c[I+4>>2]=H;g[q+4>>2]=+g[z+252>>2]+(c[j>>2]=H,+g[j>>2]);tf(F,q,p);lj(D,q,F);dh(D,0.0);i=+g[z+84>>2];if(B)Km(h);else{qh(k);h=k}s=+g[h>>2];K=+vg(+g[C>>2],s+ +g[z+20>>2]-i-+g[o>>2]);L=+g[f>>2];J=(e&64|0)==0;df(m,J&L!=0.0?L:K,+g[(+g[n>>2]!=0.0?f:p)+4>>2]);tf(F,q,m);lj(u,q,F);if(J&+g[f>>2]!=0.0){J=u+8|0;n=J;o=J;i=+g[J>>2]}else{o=u+8|0;i=i+ +g[o>>2];g[o>>2]=i;o=u+8|0;n=o}N=+g[A+5160>>2];M=+(~~(N*.5)|0);K=+g[A+5164>>2];L=+(~~(K*.5)|0);g[u>>2]=+g[u>>2]-M;J=u+4|0;g[J>>2]=+g[J>>2]-L;g[n>>2]=N-M+i;J=u+12|0;g[J>>2]=K-L+ +g[J>>2];if(!(fh(u,r)|0))if(B?(c[z+416>>2]|0)!=0:0){Zp(-1);h=0}else h=0;else{h=e&32;f=(h|0)!=0;h=h<<3|e>>>1&8|((e&8|0)==0?0:2052);h=hl(u,r,t,v,(e&4|0)==0?h:h|18)|0;k=a[t>>0]|0;m=k<<24>>24==0;if((f^1)&d|m^1){J=Rf(m|(a[v>>0]|0)==0?(k<<24>>24?25:24):26,1.0)|0;I=u;H=c[I+4>>2]|0;v=w;c[v>>2]=c[I>>2];c[v+4>>2]=H;v=o;H=c[v+4>>2]|0;I=x;c[I>>2]=c[v>>2];c[I+4>>2]=H;c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[F>>2]=c[x>>2];c[F+4>>2]=c[x+4>>2];dj(E,F,J,0,0.0)}if(B?c[z+416>>2]|0:0){Zp(-1);qh(y);g[n>>2]=+g[n>>2]-(+g[y>>2]-s)}if(f){Bk(0,A+5256|0);df(F,0.0,0.0);bj(D,o,b,0,C,F,0);Gk(1)}else{df(F,0.0,0.0);bj(D,o,b,0,C,F,0)}if((h?((e&1|0)==0?(c[z+8>>2]&67108864|0)!=0:0):0)?(c[z+320>>2]&32|0)==0:0)ik()}}else h=0;l=G;return h|0}function Zp(a){a=a|0;var b=0,d=0;b=c[(Cg()|0)+416>>2]|0;if((a|0)<0)a=c[b+12>>2]|0;b=b+44|0;d=(Xq(b,a)|0)+12|0;Hi(d,(Xq(b,a)|0)+20|0,0);return}function _p(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(Yp(b,(a[c>>0]|0)!=0,d,e)|0){a[c>>0]=a[c>>0]^1;b=1}else b=0;return b|0}function $p(b,d){b=b|0;d=d|0;var 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.0,u=0.0,v=0,w=0;s=l;l=l+96|0;i=s+80|0;n=s+72|0;e=s+64|0;f=s;h=s+56|0;o=s+40|0;p=s+24|0;q=s+8|0;r=s+16|0;j=Ii()|0;if(!(a[j+144>>0]|0)){k=Ah()|0;m=ho(b)|0;cj(n,b,0,1,-1.0);w=d;v=c[w+4>>2]|0;d=f;c[d>>2]=c[w>>2];c[d+4>>2]=v;u=+Kl();t=+Nm()*7.400000095367432;t=t+ +g[k+72>>2];c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];ph(e,i,u,t);t=+g[e>>2];df(h,t,+vg(+g[e+4>>2],+g[n+4>>2]));d=j+216|0;tf(i,d,h);lj(o,d,i);d=o+8|0;t=+g[n>>2];e=k+76|0;df(q,t>0.0?t+ +g[e>>2]:0.0,0.0);tf(i,d,q);lj(p,o,i);q=j+276|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Co();if(+g[n>>2]>0.0){df(r,+g[d>>2]+ +g[e>>2],+g[o+4>>2]+ +g[k+56>>2]);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];_i(i,b,0,1)}eh(i,o);Ak(m,i,0)|0;d=1}else d=0;l=s;return d|0}function aq(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0;e=l;l=l+16|0;d=e;if((c|0)<0)c=Yo(b,7)|0;bf(d);g[d>>2]=0.0;f=(((c|0)<(b|0)?.4000000059604645:0.0)+ +(c|0))*+Nm();g[d+4>>2]=f+ +g[(Ah()|0)+72>>2];d=$p(a,d)|0;l=e;return d|0}function bq(){var a=0,b=0,d=0,e=0,f=0,h=0;a=l;l=l+16|0;d=a;e=c[(Ii()|0)+600>>2]|0;b=e+276|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];b=Ah()|0;Ek();ch(0.0,-1.0);h=d;f=c[h+4>>2]|0;e=e+216|0;c[e>>2]=c[h>>2];c[e+4>>2]=f;dh(d,+g[b+56>>2]);Do();l=a;return}function cq(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+48|0;j=n+16|0;k=n+8|0;m=n;if(aq(a,f,g)|0){dq(j,f,+Nm());h=j+16|0;i=j+20|0;a=0;a:while(1){do{if(!(Bg(j)|0))break a;f=c[h>>2]|0}while((f|0)>=(c[i>>2]|0));while(1){g=(f|0)==(c[b>>2]|0);if(!(Od[d&63](e,f,k)|0))c[k>>2]=8748;fo(f);o=c[k>>2]|0;df(m,0.0,0.0);if(Yp(o,g,0,m)|0){c[b>>2]=f;a=1}kl();f=f+1|0;if((f|0)>=(c[i>>2]|0))continue a}}bq();eq(j)}else a=0;l=n;return a|0}function dq(a,b,c){a=a|0;b=b|0;c=+c;wg(a,b,c);return}function eq(a){a=a|0;if((c[a+8>>2]|0)==-1)return;else Cb(12113,37262,1307,12130)}function fq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;w=l;l=l+64|0;o=w+56|0;s=w;j=w+48|0;t=w+24|0;k=w+40|0;u=w+32|0;v=w+8|0;p=w+16|0;q=Ii()|0;if(!(a[q+144>>0]|0)){r=c[244]|0;h=q+216|0;x=h;n=c[x+4>>2]|0;m=s;c[m>>2]=c[x>>2];c[m+4>>2]=n;cj(j,b,0,1,-1.0);m=f?16:48;if((c[q+316>>2]|0)==1){i=+g[j>>2];v=r+5160|0;g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*.5)|0);gf(o,v,2.0);Dk(12,o);df(o,i,0.0);x=Yp(b,0,m,o)|0;Fk(1);g[h>>2]=+g[h>>2]+ +(~~(+g[v>>2]*-.5)|0);h=x}else{if(!d)df(t,0.0,0.0);else cj(t,d,0,0,-1.0);n=r+5932|0;y=+ug(q+488|0,+g[j>>2],+g[t>>2],+(~~(+g[n>>2]*1.2000000476837158)|0));Ol(k);i=+vg(0.0,+g[k>>2]-y);df(o,y,0.0);h=Yp(b,0,m|64,o)|0;if(+g[t>>2]>0.0){Bk(0,r+5256|0);df(v,i+ +g[q+508>>2],0.0);tf(u,s,v);c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];_i(o,d,0,0);Gk(1)}if(e){y=+g[n>>2];df(v,i+ +g[q+512>>2]+y*.4000000059604645,y*.1340000033378601*.5);tf(p,s,v);x=Rf((f^1)&1,1.0)|0;y=+g[n>>2]*.8659999966621399;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];hj(o,x,y)}}}else h=0;l=w;return h|0}function gq(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=(d|0)!=0;if(f){b=fq(b,c,(a[d>>0]|0)!=0,e)|0;if(f&b){a[d>>0]=a[d>>0]^1;b=1}}else b=fq(b,c,0,e)|0;return b|0}function hq(){var a=0,b=0,d=0,e=0;b=l;l=l+16|0;d=b+8|0;e=b;a=c[244]|0;df(d,0.0,0.0);df(e,0.0,0.0);pk(d,0,e);df(d,+g[a+4>>2],+g[a+5936>>2]+ +g[a+5148>>2]*2.0);gi(d,0);Ck(2,0.0);df(d,0.0,0.0);Dk(4,d);if(hi(8763,0,1295)|0?iq()|0:0){e=(c[a+6140>>2]|0)+296|0;g[e>>2]=+g[a+5224>>2]+ +g[e>>2];a=1}else{Ni();Fk(2);a=0}l=b;return a|0}function iq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0;j=l;l=l+48|0;d=j+32|0;e=j+16|0;h=j;i=Ii()|0;do if((a[i+144>>0]|0)==0?(c[i+8>>2]&1024|0)!=0:0){f=i+293|0;if(!(a[f>>0]|0)){Co();el(8806);ml(d,i);k=+g[d>>2];n=+hf(k+.5);b=d+4|0;m=+hf(+g[b>>2]+ +g[i+96>>2]+.5);k=+hf(+vg(k,+g[d+8>>2]-+g[i+92>>2])+.5);al(e,n,m,k,+hf(+g[d+12>>2]+.5));nl(h,i);mj(e,h);Hi(e,e+8|0,0);df(h,+g[d>>2]+ +g[i+296>>2],+g[b>>2]);e=h;h=c[e+4>>2]|0;b=i+216|0;c[b>>2]=c[e>>2];c[b+4>>2]=h;c[i+316>>2]=1;a[f>>0]=1;wn();b=1;break}else Cb(8777,4833,9625,32792)}else b=0;while(0);l=j;return b|0}function jq(){kq();Ni();Fk(2);return}function kq(){var b=0,d=0,e=0,f=0,h=0.0;f=l;l=l+16|0;b=f;d=Ii()|0;do if(!(a[d+144>>0]|0)){if(!(c[d+8>>2]&1024))Cb(8816,4833,9649,32805);e=d+293|0;if(!(a[e>>0]|0))Cb(8857,4833,9650,32805);else{Li();kl();h=+g[d+216>>2];ml(b,d);g[d+296>>2]=h-+g[b>>2];a[(lq(d+368|0)|0)+37>>0]=0;Do();c[d+316>>2]=0;a[e>>0]=0;break}}while(0);l=f;return}function lq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*40|0)|0;else Cb(37253,37262,1040,13011);return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+80|0;E=J+16|0;k=J+72|0;I=J+8|0;p=J;o=J+64|0;s=J+56|0;y=J+48|0;z=J+40|0;A=J+32|0;C=Ii()|0;if(!(a[C+144>>0]|0)){F=c[244]|0;G=Kg(C,b,0)|0;cj(k,b,0,1,-1.0);e=gk(G)|0;H=C+8|0;if((c[H>>2]&67108864|0)==0?(f=F+6244|0,h=c[F+6256>>2]|0,(c[f>>2]|0)>(h|0)):0){t=c[(Dj(f,h)|0)+12>>2]|0;t=(t|0)==(Kg(C,6611,0)|0);h=F+6144|0;f=c[h>>2]|0;if(t){c[h>>2]=C;t=f;q=1}else{t=f;q=0}}else{h=F+6144|0;t=c[h>>2]|0;q=0}bf(I);i=C+216|0;f=i;K=c[f>>2]|0;f=c[f+4>>2]|0;r=p;c[r>>2]=K;c[r+4>>2]=f;r=C+316|0;m=(c[j>>2]=K,+g[j>>2]);n=(c[j>>2]=f,+g[j>>2]);if((c[r>>2]|0)==1){m=m-+g[C+84>>2];n=n-+g[F+5148>>2];df(E,m,n+ +Sk(C));s=E;f=c[s+4>>2]|0;K=I;c[K>>2]=c[s>>2];c[K+4>>2]=f;K=F+5160|0;g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*.5)|0);gf(E,K,2.0);Dk(12,E);df(E,+g[k>>2],0.0);f=Yp(b,e,d?9:41,E)|0;Fk(1);g[i>>2]=+g[i>>2]+ +(~~(+g[K>>2]*-.5)|0);if(d)D=13;else{o=f;p=0}}else{df(E,m,n-+g[F+5100>>2]);K=E;f=c[K+4>>2]|0;i=I;c[i>>2]=c[K>>2];c[i+4>>2]=f;i=F+5932|0;n=+ug(C+488|0,+g[k>>2],0.0,+(~~(+g[i>>2]*1.2000000476837158)|0));Ol(o);m=+vg(0.0,+g[o>>2]-n);df(E,n,0.0);f=Yp(b,e,d?73:105,E)|0;if(!d)Bk(0,F+5256|0);df(y,m+ +g[C+512>>2]+ +g[i>>2]*.30000001192092896,0.0);tf(s,p,y);c[E>>2]=c[s>>2];c[E+4>>2]=c[s+4>>2];fj(E,1,1.0);if(d)D=13;else{Gk(1);o=f;p=0}}if((D|0)==13){o=f;p=kh(C+276|0,G)|0}if(q)c[h>>2]=t;do if((c[r>>2]|0)==1){f=q^1;if(f|e&o^1){if(!o?e|(f|p^1):0){h=0;f=0;D=36;break}h=0;f=1;D=36}else{f=0;e=0;D=37}}else{k=F+6148|0;if((((c[k>>2]|0)==(C|0)?(u=F+6244|0,v=F+6256|0,w=c[v>>2]|0,(c[u>>2]|0)>(w|0)):0)?(c[(Dj(u,w)|0)+8>>2]|0)==(C|0):0)?(x=c[(Dj(u,c[v>>2]|0)|0)+4>>2]|0,(x|0)!=0):0){nl(E,x);h=F+204|0;rf(y,h,F+800|0);i=C+20|0;f=x+20|0;if(+g[i>>2]<+g[f>>2])nq(z,E);else xl(z,E);if(+g[i>>2]<+g[f>>2])ol(A,E);else pl(A,E);n=+g[y>>2];m=+Wh(+B(+(n-+g[z>>2]))*.30000001192092896,5.0,30.0);g[y>>2]=n+(+g[i>>2]<+g[f>>2]?-.5:.5);n=+g[y+4>>2];K=z+4|0;g[K>>2]=n+ +vg(+g[K>>2]-m-n,-100.0);K=A+4|0;g[K>>2]=n+ +yf(m+ +g[K>>2]-n,100.0);h=uf(y,z,A,h)|0}else h=0;if(!(p|e^1)?(c[k>>2]|0)==(C|0):0){f=c[F+6164>>2]|0;f=(h|((f|0)==0|(f|0)==(G|0)))^1}else f=0;D=(e|p^1|h)^1;h=f;f=e|D?D:o&p;D=36}while(0);if((D|0)==36)if(h|d^1)D=37;if((D|0)==37)if(gk(G)|0)hk(c[(c[244]|0)+6256>>2]|0);if(!(e|f^1)?(c[F+6244>>2]|0)>(c[F+6256>>2]|0):0){ek(b);e=0}else{if(f)ek(b);if(e|f){df(E,0.0,0.0);pk(I,1,E);e=jk(G,c[H>>2]&335544320|0?285212993:268435777)|0}else e=0}}else e=0;l=J;return e|0}function nq(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function oq(){lk();return}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,i=0.0,j=0,k=0,m=0,n=0,o=0,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=l;l=l+160|0;p=z+144|0;y=z+64|0;x=z+16|0;m=z+8|0;n=z+128|0;o=z;k=c[244]|0;s=~~(+Qf(+g[b>>2])*255.0+.5);q=b+4|0;t=~~(+Qf(+g[q>>2])*255.0+.5);r=b+8|0;u=~~(+Qf(+g[r>>2])*255.0+.5);v=(d&2|0)!=0;if(v)w=255;else w=~~(+Qf(+g[b+12>>2])*255.0+.5);Wj(0,1);if(a|0?(j=Yi(a,0)|0,j>>>0>a>>>0):0){on(a,j);qq()}i=+g[k+5932>>2]*3.0+ +g[k+5148>>2]*2.0;df(m,i,i);a=b+12|0;Of(n,+g[b>>2],+g[q>>2],+g[r>>2],+g[a>>2]);j=m;k=c[j+4>>2]|0;m=o;c[m>>2]=c[j>>2];c[m+4>>2]=k;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];rq(8885,n,d&3074|64,p)|0;ch(0.0,-1.0);i=+g[b>>2];f=+g[q>>2];e=+g[r>>2];if(v){c[x>>2]=s;c[x+4>>2]=t;c[x+8>>2]=u;c[x+12>>2]=s;c[x+16>>2]=t;c[x+20>>2]=u;h[x+24>>3]=i;h[x+32>>3]=f;h[x+40>>3]=e;pn(8895,x)}else{A=+g[a>>2];c[y>>2]=s;c[y+4>>2]=t;c[y+8>>2]=u;c[y+12>>2]=w;c[y+16>>2]=s;c[y+20>>2]=t;c[y+24>>2]=u;c[y+28>>2]=w;h[y+32>>3]=i;h[y+40>>3]=f;h[y+48>>3]=e;h[y+56>>3]=A;pn(8948,y)}_j();l=z;return}function qq(){var b=0,d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;h=n+16|0;i=n+8|0;j=n;k=Ii()|0;do if(!(a[k+144>>0]|0)){m=c[244]|0;b=(c[k+316>>2]|0)==1?2:1;if(!(Sp(b)|0))Cb(9676,4833,10564,31354);if(b&2|0){Mq();break}e=k+416|0;if(c[e>>2]|0)Li();d=+g[k+20>>2];f=d+ +g[k+28>>2];if(!(Nq(k+368|0)|0))d=d+ +g[k+404>>2];b=k+220|0;df(i,d,+g[b>>2]);df(j,f,+g[b>>2]+1.0);lj(h,i,j);df(i,0.0,0.0);bh(i,0.0);if(fh(h,0)|0){k=c[k+596>>2]|0;df(i,+g[h+8>>2],+g[h+4>>2]);Ov(k,h,i,Rf(27,1.0)|0,1.0);if(a[m+10480>>0]|0)$i(0,9771,0);if(c[e>>2]|0){Zp(-1);c[(c[e>>2]|0)+36>>2]=c[b>>2]}}else if(c[e>>2]|0)Zp(-1)}while(0);l=n;return}function rq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+176|0;o=I+152|0;G=I+144|0;H=I+136|0;B=I+48|0;C=I+161|0;n=I+160|0;D=I+104|0;E=I+16|0;F=I+128|0;p=I+64|0;q=I+120|0;r=I+80|0;s=I+40|0;t=I+32|0;u=I+96|0;v=I+8|0;w=I;x=I+72|0;y=Ii()|0;if(!(a[y+144>>0]|0)){z=c[244]|0;A=Kg(y,b,0)|0;k=+Om();i=+g[f>>2];if(i==0.0){g[f>>2]=k;i=k}h=f+4|0;j=+g[h>>2];if(j==0.0){g[h>>2]=k;m=k}else m=j;h=y+216|0;tf(o,h,f);lj(B,h,o);if(!(m>=k))j=0.0;else j=+g[z+5148>>2];dh(B,j);if(fh(B,A)|0){h=hl(B,A,C,n,0)|0;f=(e&2|0)==0?e:e&-3073;Of(D,+g[d>>2],+g[d+4>>2],+g[d+8>>2],1.0);i=+yf(i,m)/2.990000009536743;j=+yf(+g[z+5152>>2],i*.5);c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];Uj(E,-.75);if((f&2048|0)!=0?+g[d+12>>2]<1.0:0){k=+g[E>>2];s=E+8|0;m=+(~~((k+ +g[s>>2])*.5+.5)|0);df(F,i+k,+g[E+4>>2]);t=c[s+4>>2]|0;u=p;c[u>>2]=c[s>>2];c[u+4>>2]=t;u=Sf(d)|0;df(q,-.75-i,-.75);c[H>>2]=c[F>>2];c[H+4>>2]=c[F+4>>2];c[G>>2]=c[p>>2];c[G+4>>2]=c[p+4>>2];c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];sq(H,G,u,i,o,j,10);H=c[y+596>>2]|0;df(o,m,+g[E+12>>2]);Qv(H,E,o,Sf(D)|0,j,5)}else{F=f&1024|0?d:D;c[r>>2]=c[F>>2];c[r+4>>2]=c[F+4>>2];c[r+8>>2]=c[F+8>>2];c[r+12>>2]=c[F+12>>2];if(+g[r+12>>2]<1.0){q=E;F=c[q+4>>2]|0;D=s;c[D>>2]=c[q>>2];c[D+4>>2]=F;D=E+8|0;E=c[D+4>>2]|0;F=t;c[F>>2]=c[D>>2];c[F+4>>2]=E;F=Sf(r)|0;df(u,-.75,-.75);c[H>>2]=c[s>>2];c[H+4>>2]=c[s+4>>2];c[G>>2]=c[t>>2];c[G+4>>2]=c[t+4>>2];c[o>>2]=c[u>>2];c[o+4>>2]=c[u+4>>2];sq(H,G,F,i,o,j,-1)}else{H=c[y+596>>2]|0;Qv(H,E,E+8|0,Sf(r)|0,j,15)}}if(+g[z+5156>>2]>0.0){H=B;F=c[H+4>>2]|0;E=v;c[E>>2]=c[H>>2];c[E+4>>2]=F;E=B+8|0;F=c[E+4>>2]|0;H=w;c[H>>2]=c[E>>2];c[H+4>>2]=F;c[G>>2]=c[v>>2];c[G+4>>2]=c[v+4>>2];c[o>>2]=c[w>>2];c[o+4>>2]=c[w+4>>2];ej(G,o,j)}else{H=c[y+596>>2]|0;Pv(H,B,B+8|0,Rf(7,1.0)|0,j,15,1.0)}if((c[z+6172>>2]|0)==(A|0)?vq(0,0)|0:0){if(!(f&2))wq(9212,d,16,2)|0;else wq(9205,d,12,2)|0;df(x,0.0,0.0);c[o>>2]=c[x>>2];c[o+4>>2]=c[x+4>>2];rq(b,d,f,o)|0;ch(0.0,-1.0);on(9219,0);xq();a[C>>0]=0}if(!((f&64|0)!=0|(a[C>>0]|0)==0))pq(b,d,f&3074)}else h=0}else h=0;l=I;return h|0}function sq(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=+h;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0;E=l;l=l+16|0;C=E+8|0;D=E;j=Ii()|0;a:do if(d>>>0<4278190080){w=Uf(tq(-3355444,d)|0)|0;y=Uf(tq(-8355712,d)|0)|0;v=j+596|0;Qv(c[v>>2]|0,a,b,w,h,i);w=a+4|0;n=+g[w>>2];k=n+ +g[f+4>>2];x=b+4|0;m=+g[x>>2];if(k>2];u=e*2.0;j=0;while(1){s=+Wh(k,n,m);k=k+e;r=+yf(k,m);b:do if(!(r<=s)?(z=+g[a>>2],A=+(j&1|0)*e+(z+t),B=+g[b>>2],A>2]){d=p<=o&1;if(q>=n)d=d|2}else d=0;if(r>=+g[x>>2]){d=!(p<=o)?d:d|4;if(q>=n)d=d|8}f=d&i;d=c[v>>2]|0;df(C,p,s);df(D,q,r);Qv(d,C,D,y,f|0?h:0.0,f);n=+g[b>>2]}m=u+m;if(!(m>2]}}while(0);m=+g[x>>2];if(!(k>2]}}}else Qv(c[j+596>>2]|0,a,b,d,h,i);while(0);l=E;return}function tq(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;c=+(b>>>24>>>0)/255.0;e=Ft(a&255,b&255,c)|0;d=Ft(a>>>8&255,b>>>8&255,c)|0;return e|d<<8|(Ft(a>>>16&255,b>>>16&255,c)|0)<<16|-16777216|0}function uq(a){a=a|0;var b=0;b=c[244]|0;a=(a&57344|0)==0?a|8192:a;a=(a&196608|0)==0?a|65536:a;a=(a&786432|0)==0?a|262144:a;if(!(Sp(a&57344)|0))Cb(9014,4833,9859,32530);if(!(Sp(a&196608)|0))Cb(9077,4833,9860,32530);if(Sp(a&786432)|0){c[b+10368>>2]=a;return}else Cb(9142,4833,9861,32530)}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;j=o+16|0;k=o;m=c[244]|0;h=c[m+6140>>2]|0;do if(!(b&16)){i=h+272|0;f=c[i>>2]|0;e=(f|0)==0;if(!e?(c[m+6172>>2]|0)!=(f|0):0){e=0;break}if(a[m+212+d>>0]|0){if(e){if(!(b&8))Cb(16777,4833,11253,33071);g=a[h+292>>0]|0;if(g<<24>>24){f=Zg(h,h+276|0)|0;c[i>>2]=f;ah(f);if(a[m+876+d>>0]|0){_g(f,h);Qh(h)}}else{if(!(c[m+6172>>2]|0)){e=0;break}if((c[m+6196>>2]|0)!=(h|0)){e=0;break}f=Zg(h,h+276|0)|0;c[i>>2]=f}e=c[m+6172>>2]|0;if((e|0)==(f|0)){a[m+6186>>0]=g;e=f}else n=17}else{e=c[m+6172>>2]|0;n=17}if((n|0)==17)if((e|0)!=(f|0)){e=0;break}f=c[(Vg(h+420|0)|0)>>2]|0;if(Aj(d,-1.0)|0){g=f;n=20}else e=0}else e=0}else{h=0;g=0;e=Gf(10093,0,0)|0;n=20}while(0);if((n|0)==20){f=m+6896|0;do if(!(a[f>>0]|0))if(!e)Cb(10107,4833,11291,33071);else{Mh();c[m+6916>>2]=e;c[m+6920>>2]=g;a[f>>0]=1;c[m+6900>>2]=b;c[m+6904>>2]=d;break}while(0);if(!(b&1)){df(j,0.0,0.0);pk(m+204|0,0,j);n=Tf(4)|0;Of(k,1.0,1.0,1.0,.6000000238418579);or(j,n,k);Bk(4,j);Wj(512,1)}if(!(b&18)){a[h+292>>0]=0;e=1}else e=1}l=o;return e|0}function wq(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=c[244]|0;h=i+6908|0;e=(e|0)==0?1:e;if(!a)Cb(10139,4833,11344,33091);if((c8(a)|0)>>>0>=9)Cb(10150,4833,11345,33091);g=(d|0)!=0;if(!((b|0)!=0&g)?!((b|0)==0&(d|0)==0):0)Cb(10225,4833,11346,33091);if((e+-1|0)>>>0>=2)Cb(10289,4833,11347,33091);if(!(c[i+6916>>2]|0))Cb(10340,4833,11348,33091);if(!((e|0)!=1?(f=i+6924|0,(c[f>>2]|0)!=-1):0)){zf(i+6928|0,a,9);f=i+6976|0;pr(f,0);do if(d>>>0<=8)if(g){g=i+6988|0;a=g;c[a>>2]=0;c[a+4>>2]=0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0;break}else{c[h>>2]=0;break}else{pr(f,d);g=c[i+6984>>2]|0;c[h>>2]=g;Zaa(g|0,b|0,d|0)|0}while(0);c[i+6912>>2]=d;f=i+6924|0}h=c[i+6076>>2]|0;c[f>>2]=h;i=c[i+6972>>2]|0;return (i|0)==(h|0)|(i|0)==(h+-1|0)|0}function xq(){var b=0;b=c[244]|0;if(!(a[b+6896>>0]|0))Cb(10122,4833,11322,33110);if(!(c[b+6900>>2]&1)){_j();Gk(1)}if((c[b+6924>>2]|0)==-1)Mh();return}function yq(a,b,c){a=a|0;b=b|0;c=c|0;return zq(a,b,c|2)|0}function zq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,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=l;l=l+224|0;D=Z+152|0;A=Z+48|0;B=Z+32|0;y=Z+16|0;x=Z;T=Z+136|0;U=Z+120|0;w=Z+112|0;F=Z+96|0;G=Z+88|0;H=Z+80|0;I=Z+72|0;E=Z+64|0;W=Ii()|0;if(!(a[W+144>>0]|0)){X=c[244]|0;J=+Om();if(!(e&16))k=J+ +g[X+5168>>2];else k=0.0;v=+Kl()-k;L=Yi(b,0)|0;V=e&2;S=(V|0)==0;z=(e&4096|0)!=0;V=4-(V>>>1)|0;Co();el(b);f=(e&32|0)==0?e:e&-57353|8200;if(!(f&8))Aq(d,f);if(!(f&57344))f=c[X+10368>>2]&57344|f;if(!(f&196608))f=c[X+10368>>2]&196608|f;K=c[X+10368>>2]|0;K=K&-1040385|(f|((f&786432|0)==0?K&786432:0));u=c[d>>2]|0;c[T>>2]=u;M=T+4|0;N=d+4|0;C=c[N>>2]|0;c[M>>2]=C;O=T+8|0;P=d+8|0;R=c[P>>2]|0;c[O>>2]=R;Q=T+12|0;k=(c[j>>2]=u,+g[j>>2]);o=(c[j>>2]=C,+g[j>>2]);r=(c[j>>2]=R,+g[j>>2]);if(S)s=+g[d+12>>2];else s=1.0;g[Q>>2]=s;i=f&16384;R=(i|0)!=0;if(R){Vf(k,o,r,T,M,O);k=+g[T>>2];o=+g[M>>2];r=+g[O>>2];s=+g[Q>>2]}h=~~(k*255.0+(k>=0.0?.5:-.5));c[U>>2]=h;u=U+4|0;n=~~(o*255.0+(o>=0.0?.5:-.5));c[u>>2]=n;t=U+8|0;p=~~(r*255.0+(r>=0.0?.5:-.5));c[t>>2]=p;q=U+12|0;m=~~(s*255.0+(s>=0.0?.5:-.5));c[q>>2]=m;C=(K&32|0)==0;if(!((f&24576|0)!=0&C))if((f&32768|0)!=0&C){i=kj(h,0,255)|0;h=kj(n,0,255)|0;f=kj(p,0,255)|0;if(S){z=kj(m,0,255)|0;c[x>>2]=i;c[x+4>>2]=h;c[x+8>>2]=f;c[x+12>>2]=z;Ef(D,64,9504,x)|0}else{c[y>>2]=i;c[y+4>>2]=h;c[y+8>>2]=f;Ef(D,64,9522,y)|0}kg(v);do if(lg(9536,D,64,6,0,0)|0){f=D;while(1){h=a[f>>0]|0;if(h<<24>>24!=35?!(Bq(h<<24>>24)|0):0)break;f=f+1|0}c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;if(S){c[B>>2]=U;c[B+4>>2]=u;c[B+8>>2]=t;c[B+12>>2]=q;y9(f,9543,B)|0;f=1;break}else{c[A>>2]=U;c[A+4>>2]=u;c[A+8>>2]=t;y9(f,9560,A)|0;f=1;break}}else f=0;while(0);if(!(K&8))qk(9225,1)|0;mg();i=0}else{i=0;f=0}else{u=X+5168|0;r=+g[u>>2];o=+(V+-1|0);s=+vg(1.0,+(~~((v-r*o)/+(V|0))|0));o=+vg(1.0,+(~~(v-(r+s)*o)|0));t=(f&131072|0)!=0;cj(w,t?9350:9358,0,0,-1.0);p=!(s<=+g[w>>2])?(i>>>14)+1|0:0;kg(s);if(!V){h=0;f=0}else{k=z?0.0:1.0;q=(K&8|0)==0;n=z?0:255;h=0;m=0;f=0;do{if((m|0)>0)ch(0.0,+g[u>>2]);i=m;m=m+1|0;if((m|0)==(V|0))kg(o);if(t){f=((Mo(c[980+(i<<2)>>2]|0,T+(i<<2)|0,.003921568859368563,0.0,k,c[1044+(p<<4)+(i<<2)>>2]|0,1.0)|0)&1|h&1)&255;h=f}else h=((So(c[980+(i<<2)>>2]|0,U+(i<<2)|0,1.0,0,n,c[996+(p<<4)+(i<<2)>>2]|0)|0)&1|h&1)&255;if(q)qk(9225,1)|0}while((m|0)!=(V|0))}mg();mg();i=(f&1)!=0;f=(h&1)!=0}if(!(K&16)){if(C)ch(0.0,+g[X+5168>>2]);if(S)k=+g[d+12>>2];else k=1.0;Of(F,+g[d>>2],+g[N>>2],+g[P>>2],k);df(G,0.0,0.0);c[D>>2]=c[G>>2];c[D+4>>2]=c[G+4>>2];if((K&4|0)==0&(rq(9573,F,K,D)|0)){G=X+10372|0;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];ek(9587);ol(H,W+276|0);df(I,-1.0,+g[X+5164>>2]);tf(D,H,I);df(E,0.0,0.0);pk(D,0,E)}if(!(K&8))qk(9225,1)|0;if(mk(9587)|0){h=c[X+6140>>2]|0;if((L|0)!=(b|0)){on(b,L);qq()}kg(J*12.0);f=f|(Cq(9594,d,e&987650|59520,X+10372|0)|0);mg();lk()}else h=0;n=h}else n=0;if((L|0)!=(b|0)&(K&128|0)==0){ch(0.0,+g[X+5168>>2]);on(b,L)}m=(n|0)==0;if(m){if(!i){h=0;do{g[T+(h<<2)>>2]=+(c[U+(h<<2)>>2]|0)/255.0;h=h+1|0}while((h|0)!=4)}if(R)Xf(+g[T>>2],+g[M>>2],+g[O>>2],T,M,O);if(f?(c[d>>2]=c[T>>2],c[N>>2]=c[M>>2],c[P>>2]=c[O>>2],S):0)c[d+12>>2]=c[Q>>2]}kl();Do();if((a[W+292>>0]|0)!=0?Dq()|0:0){h=Eq(9205,0)|0;if(h){i=d;f=c[h>>2]|0;h=i+12|0;do{a[i>>0]=a[f>>0]|0;i=i+1|0;f=f+1|0}while((i|0)<(h|0));f=1}h=Eq(9212,0)|0;if(h){Zaa(d|0,c[h>>2]|0,V<<2|0)|0;f=1}Fq()}if((!m?(Y=c[X+6172>>2]|0,Y|0):0)?(c[X+6196>>2]|0)==(n|0):0)c[W+272>>2]=Y}else f=0;l=Z;return f|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+144|0;u=w+64|0;t=w+48|0;v=w+32|0;s=w;q=w+80|0;e=(b&57344|0)==0;f=(b&196608|0)==0;if(e|f?mk(9225)|0:0){r=(c[244]|0)+10368|0;d=c[r>>2]|0;if(e){n=ep(9233,(d&8192|0)!=0)|0;p=d&-57345;d=n?p|8192:d;n=ep(9237,(d&16384|0)!=0)|0;d=n?p|16384:d;p=ep(9241,(d&32768|0)!=0)|0;d=p?d&-57345|32768:d}if(f){if(e)qq();n=ep(9245,(d&65536|0)!=0)|0;p=d&-196609;d=n?p|65536:d;n=ep(9252,(d&131072|0)!=0)|0;d=n?p|131072:d}qq();df(q,-1.0,0.0);if(An(9263,q)|0)ek(37851);if(mk(37851)|0){j=+g[a>>2];k=~~(+Qf(j)*255.0+.5);m=+g[a+4>>2];n=~~(+Qf(m)*255.0+.5);o=+g[a+8>>2];p=~~(+Qf(o)*255.0+.5);b=(b&2|0)!=0;if(b){i=1.0;e=q;f=255}else{f=~~(+Qf(+g[a+12>>2])*255.0+.5);i=+g[a+12>>2];e=q}h[s>>3]=j;h[s+8>>3]=m;h[s+16>>3]=o;h[s+24>>3]=i;Ef(e,64,9273,s)|0;df(s,0.0,0.0);if(Yp(e,0,0,s)|0)th(e);c[v>>2]=k;c[v+4>>2]=n;c[v+8>>2]=p;c[v+12>>2]=f;Ef(e,64,9302,v)|0;df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);if(b){c[t>>2]=k;c[t+4>>2]=n;c[t+8>>2]=p;Ef(e,64,9316,t)|0}else{c[u>>2]=k;c[u+4>>2]=n;c[u+8>>2]=p;c[u+12>>2]=f;Ef(e,64,9331,u)|0}df(v,0.0,0.0);if(Yp(e,0,0,v)|0)th(e);lk()}c[r>>2]=d;lk()}l=w;return}function Bq(a){a=a|0;var b=0;a:do if((a|0)>=32)if((a|0)<12288)switch(a|0){case 32:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 12288:{a=1;break a}default:{b=2;break a}}else switch(a|0){case 9:{a=1;break}default:b=2}while(0);if((b|0)==2)a=0;return a|0}function Cq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,G=0,H=0,I=0.0,J=0,L=0,M=0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0.0,fa=0.0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=l;l=l+352|0;ma=za+328|0;la=za+312|0;ya=za+128|0;w=za+120|0;u=za+112|0;M=za+96|0;xa=za+280|0;ba=za+272|0;ca=za+264|0;da=za+256|0;ga=za+248|0;G=za+232|0;W=za+216|0;X=za+200|0;H=za+40|0;na=za+24|0;oa=za+8|0;v=za+304|0;x=za+296|0;Y=za+104|0;Z=za+88|0;_=za+152|0;$=za;aa=za+144|0;J=za+80|0;L=za+240|0;P=za+224|0;Q=za+208|0;R=za+192|0;S=za+184|0;pa=za+72|0;qa=za+64|0;ra=za+176|0;sa=za+56|0;ta=za+32|0;ua=za+168|0;va=za+160|0;q=c[244]|0;k=Ii()|0;wa=c[k+596>>2]|0;el(a);Co();f=d>>>4&16^16|d;if(!(d&8))Hq(f,b);if(!(d&786432)){ka=c[q+10368>>2]&786432;f=((ka|0)==0?262144:ka)|f}if(!(Sp(f&786432)|0))Cb(9142,4833,10287,32505);if(!(f&8))f=c[q+10368>>2]&512|f;ja=f&2;t=(ja|0)!=0;ka=(f&512|0)!=0&(t^1);z=k+216|0;V=c[z>>2]|0;z=c[z+4>>2]|0;p=M;c[p>>2]=V;c[p+4>>2]=z;ea=+Om();fa=+Kl();p=q+5168|0;ha=+g[p>>2];fa=+vg(ea,fa-(ka?2.0:1.0)*(ea+ha));n=(c[j>>2]=V,+g[j>>2]);N=ha+(fa+n);O=ea+N;ha=ha+O;ia=+(~~(ea*.20000000298023224)|0);ja=4-(ja>>>1)<<2;Zaa(xa|0,b|0,ja|0)|0;U=fa*.07999999821186066;I=fa*.5;T=I-U;V=M+4|0;df(ba,(ea+fa)*.5+n,I+(c[j>>2]=z,+g[j>>2]));n=T-+(~~(fa*.027000000700354576)|0);df(ca,n,0.0);i=n*-.5;df(da,i,n*-.8660249710083008);df(ga,i,n*.8660249710083008);z=b+4|0;A=b+8|0;Vf(+g[b>>2],+g[z>>2],+g[A>>2],G,W,X);D=(f&524288|0)!=0;if(D){df(ma,ea+(fa+ +g[p>>2]),fa);Cn(9603,ma)|0;if(Kj()|0){rf(ma,q+816|0,ba);rf(la,q+204|0,ba);h=+xf(ma);n=T+-1.0;if(h>=n*n?(n=I+1.0,h<=n*n):0){n=+K(+(+g[la+4>>2]),+(+g[la>>2]))/3.1415927410125732*.5;g[G>>2]=n<0.0?n+1.0:n;k=1}else k=0;i=+g[G>>2]*-2.0*3.1415927410125732;h=+E(+i);i=+F(+i);Iq(ya,ma,h,i);if(uf(ca,da,ga,ya)|0){Iq(ya,la,h,i);if(!(uf(ca,da,ga,ya)|0)){wf(H,ca,da,ga,ya);o=H;y=c[o+4>>2]|0;C=ya;c[C>>2]=c[o>>2];c[C+4>>2]=y}vf(ca,da,ga,ya,H,na,oa);n=+Wh(1.0-+g[na>>2],9.999999747378752e-05,1.0);g[X>>2]=n;g[W>>2]=+Wh(+g[H>>2]/n,9.999999747378752e-05,1.0);d=1;m=1}else{d=0;m=k}}else{k=0;d=0;m=0}o=(d&1)!=0;k=(k&1)!=0;d=(m&1)!=0;if(!(f&8)){qk(9225,1)|0;y=k;C=o}else{y=k;C=o}}else if(f&262144){df(ma,fa,fa);Cn(9607,ma)|0;if(Kj()|0){n=fa+-1.0;g[W>>2]=+Qf((+g[q+204>>2]-+g[M>>2])/n);g[X>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/n);k=1;d=1}else{k=0;d=0}if(!(f&8))qk(9225,1)|0;df(ma,N,+g[V>>2]);an(ma);df(ma,ea,fa);Cn(9610,ma)|0;k=k<<24>>24!=0;if(Kj()|0){g[G>>2]=+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));y=1;C=k;d=1}else{y=0;C=k}}else{y=0;C=0;d=0}if(ka?(df(ma,ha,+g[V>>2]),an(ma),df(ma,ea,fa),Cn(9614,ma)|0,Kj()|0):0){g[b+12>>2]=1.0-+Qf((+g[q+208>>2]-+g[V>>2])/(fa+-1.0));d=1}k=(f&256|0)!=0;if(!k){ch(0.0,+g[p>>2]);Co()}m=(f&128|0)!=0;if(!m?(s=Yi(a,0)|0,(s|0)!=(a|0)):0){if(k)ch(0.0,+g[p>>2]);on(a,s)}if(!k){if(t)h=1.0;else h=+g[b+12>>2];Of(la,+g[b>>2],+g[z>>2],+g[A>>2],h);if(m)pn(9620,u);k=f&7232;i=ea*3.0;n=ea*2.0;df(v,i,n);c[ma>>2]=c[v>>2];c[ma+4>>2]=c[v+4>>2];rq(9628,la,k,ma)|0;if(e){pn(9638,w);if(t)h=1.0;else h=+g[e+12>>2];Of(ya,+g[e>>2],+g[e+4>>2],+g[e+8>>2],h);df(x,i,n);c[ma>>2]=c[x>>2];c[ma+4>>2]=c[x+4>>2];if(rq(9647,ya,k,ma)|0){Zaa(b|0,e|0,ja|0)|0;d=1}}Do()}if(C|y){h=+g[G>>2];i=+g[W>>2];n=+g[X>>2];Xf(h>=1.0?h+-9.999999747378752e-06:h,i>0.0?i:9.999999747378752e-06,n>0.0?n:9.999999974752427e-07,b,z,A)}do if(!(f&32)){kg(ea+(ka?ha:N)-+g[M>>2]);k=f&203802;m=(f&57344|0)==0;if((f&8192|0)!=0|m)d=d|(zq(9658,b,k|8196)|0);if((f&16384|0)!=0|m)d=d|(zq(9664,b,k|16388)|0);if((f&32768|0)!=0|m){e=d|(zq(9670,b,k|32772)|0);mg();if(e){B=61;break}else{s=0;break}}else{mg();if(d){B=61;break}else{s=0;break}}}else if(d)B=61;else s=0;while(0);if((B|0)==61){Vf(+g[b>>2],+g[z>>2],+g[A>>2],ma,la,ya);h=+g[G>>2];do if(+g[ma>>2]<=0.0&h>0.0){i=+g[ya>>2];if(i<=0.0?(r=+g[X>>2],r!=i):0){Xf(h,+g[W>>2],r*.5,b,z,A);break}if(+g[la>>2]<=0.0)Xf(h,+g[W>>2]*.5,i,b,z,A)}while(0);s=1}Of(H,1.0,1.0,1.0,1.0);r=+g[G>>2];Xf(r,1.0,1.0,H,H+4|0,H+8|0);q=Pf(H)|0;Of(ma,+g[b>>2],+g[z>>2],+g[A>>2],1.0);a=Pf(ma)|0;bf(na);if(!D){if(f&262144|0){df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,-1,q,q,-1);df(la,fa,fa);tf(ma,M,la);Rv(wa,M,ma,0,0,-16777216,-16777216);ga=M;d=c[ga+4>>2]|0;f=J;c[f>>2]=c[ga>>2];c[f+4>>2]=d;df(ya,fa,fa);tf(L,M,ya);c[la>>2]=c[J>>2];c[la+4>>2]=c[J+4>>2];c[ma>>2]=c[L>>2];c[ma+4>>2]=c[L+4>>2];ej(la,ma,0.0);i=+g[M>>2];g[na>>2]=+Wh(+(~~(i+fa*+Qf(+g[W>>2])+.5)|0),i+2.0,fa+i+-2.0);i=+g[V>>2];g[na+4>>2]=+Wh(+(~~(i+fa*+Qf(1.0-+g[X>>2])+.5)|0),i+2.0,fa+i+-2.0);h=fa/6.0;f=0;d=-16776961;do{df(ma,N,h*+(f|0)+i);f=f+1|0;df(la,O,h*+(f|0)+ +g[V>>2]);ga=d;d=c[1092+(f<<2)>>2]|0;Rv(wa,ma,la,ga,ga,d,d);i=+g[V>>2]}while((f|0)!=6);df(P,N,i);df(Q,O,fa+ +g[V>>2]);c[la>>2]=c[P>>2];c[la+4>>2]=c[P+4>>2];c[ma>>2]=c[Q>>2];c[ma+4>>2]=c[Q+4>>2];ej(la,ma,0.0);df(R,N+-1.0,+(~~(i+fa*r+.5)|0));df(S,ia+1.0,ia);c[la>>2]=c[R>>2];c[la+4>>2]=c[R+4>>2];c[ma>>2]=c[S>>2];c[ma+4>>2]=c[S+4>>2];Lq(wa,la,ma,ea+2.0)}}else{n=1.5/I;o=Zo(4,(~~I|0)/12|0)|0;p=wa+24|0;h=I+T;i=h*.5;d=ba+4|0;k=wa+32|0;f=0;m=-16776961;do{O=+(f|0);N=O/6.0*2.0*3.1415927410125732-n;O=n+(O+1.0)/6.0*2.0*3.1415927410125732;P=c[p>>2]|0;Iv(wa,ba,i,N,O,o);jj(wa,-1,0,U);R=c[p>>2]|0;I=+g[ba>>2]+T*+E(+N);df(ya,I,+g[d>>2]+T*+F(+N));N=+g[ba>>2]+T*+E(+O);df(oa,N,+g[d>>2]+T*+F(+O));Q=c[k>>2]|0;S=ya;M=c[S+4>>2]|0;L=Y;c[L>>2]=c[S>>2];c[L+4>>2]=M;L=oa;M=c[L+4>>2]|0;S=Z;c[S>>2]=c[L>>2];c[S+4>>2]=M;f=f+1|0;S=m;m=c[1092+(f<<2)>>2]|0;c[la>>2]=c[Y>>2];c[la+4>>2]=c[Y+4>>2];c[ma>>2]=c[Z>>2];c[ma+4>>2]=c[Z+4>>2];iw(Q+(P*20|0)|0,Q+(R*20|0)|0,la,ma,S,m)}while((f|0)!=6);T=r*2.0*3.1415927410125732;O=+E(+T);T=+F(+T);df(ma,h*O*.5+ +g[ba>>2],h*T*.5+ +g[d>>2]);U=U*(y?.6499999761581421:.550000011920929);Z=kj(~~(U/1.399999976158142),9,32)|0;Xv(wa,ma,U,q,Z);Wv(wa,ma,U+1.0,-8355712,Z,1.0);Wv(wa,ma,U,-1,Z,1.0);Iq(ya,ca,O,T);tf(la,ba,ya);Iq(oa,da,O,T);tf(ya,ba,oa);Iq(_,ga,O,T);tf(oa,ba,_);Tm(_);xv(wa,6,6);Jq(wa,la,_,q);Jq(wa,ya,_,q);Jq(wa,oa,_,-1);Jq(wa,la,_,0);Jq(wa,ya,_,-16777216);Jq(wa,oa,_,0);Uv(wa,la,ya,oa,-8355712,1.5);Kq(aa,oa,la,+Qf(+g[W>>2]));Kq($,aa,ya,+Qf(1.0-+g[X>>2]));ca=$;da=c[ca+4>>2]|0;ga=na;c[ga>>2]=c[ca>>2];c[ga+4>>2]=da}U=C?10.0:6.0;Xv(wa,na,U,a,12);Wv(wa,na,U+1.0,-8355712,12,1.0);Wv(wa,na,U,-1,12,1.0);if(ka){U=+Qf(+g[b+12>>2]);T=+g[V>>2];al(oa,ha,T,ea+ha,fa+T);ga=oa;da=c[ga+4>>2]|0;na=pa;c[na>>2]=c[ga>>2];c[na+4>>2]=da;na=oa+8|0;da=na;ga=c[da+4>>2]|0;ka=qa;c[ka>>2]=c[da>>2];c[ka+4>>2]=ga;T=+Dl(oa)*.5;df(ra,0.0,0.0);c[ya>>2]=c[pa>>2];c[ya+4>>2]=c[pa+4>>2];c[la>>2]=c[qa>>2];c[la+4>>2]=c[qa+4>>2];c[ma>>2]=c[ra>>2];c[ma+4>>2]=c[ra+4>>2];sq(ya,la,0,T,ma,0.0,-1);ya=a&16777215;Rv(wa,oa,na,a,a,ya,ya);fa=+(~~(fa*(1.0-U)+ +g[V>>2]+.5)|0);ya=oa;ra=c[ya+4>>2]|0;qa=sa;c[qa>>2]=c[ya>>2];c[qa+4>>2]=ra;qa=na;ra=c[qa+4>>2]|0;ya=ta;c[ya>>2]=c[qa>>2];c[ya+4>>2]=ra;c[la>>2]=c[sa>>2];c[la+4>>2]=c[sa+4>>2];c[ma>>2]=c[ta>>2];c[ma+4>>2]=c[ta+4>>2];ej(la,ma,0.0);df(ua,ha+-1.0,fa);df(va,ia+1.0,ia);c[la>>2]=c[ua>>2];c[la+4>>2]=c[ua+4>>2];c[ma>>2]=c[va>>2];c[ma+4>>2]=c[va+4>>2];Lq(wa,la,ma,ea+2.0)}Do();kl();if(s)f=(_7(xa,b,ja)|0)!=0;else f=0;l=za;return f|0}function Dq(){var b=0,d=0,e=0,f=0;d=c[244]|0;if((((a[d+6896>>0]|0)!=0?(e=c[d+6140>>2]|0,(a[e+292>>0]|0)!=0):0)?(b=c[d+6148>>2]|0,(b|0)!=0):0)?(c[e+604>>2]|0)==(c[b+604>>2]|0):0){b=c[e+272>>2]|0;if(!b)b=Zg(e,e+276|0)|0;if((c[d+6916>>2]|0)!=(b|0)){f=e+276|0;e=d+6940|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[d+6956>>2]=b;b=1}else b=0}else b=0;return b|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;j=n;k=c[244]|0;h=c[k+6140>>2]|0;m=k+6908|0;if(!(a[k+6896>>0]|0))Cb(10122,4833,11436,33148);if((c[k+6924>>2]|0)==-1)Cb(10362,4833,11437,33148);if((b|0)!=0?!(qr(m,b)|0):0)b=0;else{b=k+6956|0;i=(c[k+6968>>2]|0)==(c[b>>2]|0);e=k+6940|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];f=+Dl(j);f=f*+$h(j);e=k+6960|0;if(f<+g[e>>2]){c[k+6964>>2]=c[b>>2];g[e>>2]=f}a[k+6937>>0]=i&1;do if(!(((c[k+6900>>2]|d)&2048|0)!=0|i^1)){Uj(j,3.5);o=rr(h+432|0,j)|0;b=h+596|0;e=c[b>>2]|0;if(o){Pv(e,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);break}else{iv(e);o=c[b>>2]|0;Pv(o,j,j+8|0,Rf(42,1.0)|0,0.0,-1,2.0);jv(c[b>>2]|0);break}}while(0);c[k+6972>>2]=c[k+6076>>2];if(i)b=(wj(c[k+6904>>2]|0)|0)^1;else b=0;a[k+6938>>0]=b&1;b=(d&1024|0)==0&(b^1)?0:m}l=n;return b|0}function Fq(){if(!(a[(c[244]|0)+6896>>0]|0))Cb(10122,4833,11477,33170);else return}function Gq(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;k=l;l=l+16|0;e=k;c[e>>2]=c[b>>2];f=e+4|0;h=b+4|0;c[f>>2]=c[h>>2];i=e+8|0;j=b+8|0;c[i>>2]=c[j>>2];g[e+12>>2]=1.0;if(Cq(a,e,d|2,0)|0){c[b>>2]=c[e>>2];c[h>>2]=c[f>>2];c[j>>2]=c[i>>2];a=1}else a=0;l=k;return a|0}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+32|0;i=o+24|0;j=o+16|0;k=o;m=(a&786432|0)==0;n=a&2;h=(a&514|0)==0;if(m|h?mk(9225)|0:0){e=c[244]|0;if(m){q=+g[e+5932>>2]*8.0;p=+Om();df(i,q,+vg(q-(p+ +g[e+5168>>2]),1.0));kg(+g[i>>2]);f=e+10368|0;d=0;do{a=(d|0)==1;if(a)qq();fo(d);r=((d|0)==0?262568:424)|n;a=a?r|524288:r;$m(j);if(Yp(12148,0,0,i)|0)c[f>>2]=c[f>>2]&-786433|a&786432;an(j);cf(k);Zaa(k|0,b|0,4-(a>>>1&1)<<2|0)|0;Cq(12161,k,a,0)|0;kl();d=d+1|0}while((d|0)!=2);mg()}if(h){if(m)qq();dp(12175,e+10368|0,512)|0}lk()}l=o;return}function Iq(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f*c-e*d,f*d+e*c);return}function Jq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Gt(a,c[a+48>>2]&65535);Ht(a,b,d,e);return}function Kq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0.0,f=0.0;f=+g[b>>2];e=+g[b+4>>2];df(a,f+(+g[c>>2]-f)*d,e+(+g[c+4>>2]-e)*d);return}function Lq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,k=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.0;f=l;l=l+80|0;h=f+72|0;i=f+64|0;w=f+56|0;n=f+48|0;v=f+40|0;u=f+8|0;q=f+32|0;p=f+24|0;m=f+16|0;k=f;t=+g[b>>2];x=+g[d>>2];s=t+x;o=+g[b+4>>2];df(w,s+1.0,o);r=+g[d+4>>2]+1.0;df(n,x+2.0,r);c[i>>2]=c[w>>2];c[i+4>>2]=c[w+4>>2];c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];It(a,i,h,1,-16777216);df(v,s,o);b=d;n=c[b>>2]|0;b=c[b+4>>2]|0;d=u;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[v>>2];c[i+4>>2]=c[v+4>>2];c[h>>2]=c[u>>2];c[h+4>>2]=c[u+4>>2];It(a,i,h,1,-1);s=(c[j>>2]=n,+g[j>>2]);e=t+e-s;df(q,e+-1.0,o);df(p,s+2.0,r);c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];It(a,i,h,0,-16777216);df(m,e,o);d=k;c[d>>2]=n;c[d+4>>2]=b;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];It(a,i,h,0,-1);l=f;return}function Mq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0;j=l;l=l+48|0;i=j;b=j+24|0;d=j+16|0;e=j+8|0;f=Ii()|0;if(((a[f+144>>0]|0)==0?(h=c[244]|0,n=+g[f+220>>2],k=n+ +g[f+248>>2],m=f+216|0,df(d,+g[m>>2],n),df(e,+g[m>>2]+1.0,k),lj(b,d,e),df(d,+Dl(b),0.0),bh(d,0.0),fh(b,0)|0):0)?(m=c[f+596>>2]|0,df(d,+g[b>>2],+g[b+4>>2]),df(e,+g[b>>2],+g[b+12>>2]),Ov(m,d,e,Rf(27,1.0)|0,1.0),a[h+10480>>0]|0):0)Zi(9805,i);l=j;return}function Nq(a){a=a|0;return (c[a>>2]|0)==0|0}function Oq(){var b=0,c=0;c=l;l=l+16|0;b=c;if(!(a[(Ii()|0)+144>>0]|0)){df(b,0.0,0.0);bh(b,0.0)}l=c;return}function Pq(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=l;l=l+32|0;c=b+8|0;e=b;d=Cg()|0;f=d+216|0;tf(e,f,a);lj(c,f,e);a=lh(d+432|0,c)|0;l=b;return a|0}function Qq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=(Cg()|0)+432|0;lj(d,a,b);b=lh(e,d)|0;l=c;return b|0}function Rq(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Sq(){var b=0,d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;b=i;d=Ii()|0;if(!(a[d+144>>0]|0)){e=c[244]|0;f=d+316|0;h=c[f>>2]|0;c[f>>2]=0;if(+g[d+248>>2]>0.0){df(b,0.0,0.0);bh(b,0.0)}else{df(b,0.0,+g[e+5932>>2]);bh(b,0.0)}c[f>>2]=h}l=i;return}function Tq(){var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0.0;j=Ii()|0;if((a[j+144>>0]|0)==0?(b=j+416|0,c[b>>2]|0):0){f=c[244]|0;mg();Li();h=c[b>>2]|0;e=h+40|0;i=j+220|0;g[e>>2]=+vg(+g[e>>2],+g[i>>2]);b=h+12|0;d=(c[b>>2]|0)+1|0;c[b>>2]=d;if((d|0)<(c[h+16>>2]|0)){k=+Hm(d);e=j+404|0;d=j+412|0;g[d>>2]=k-+g[e>>2]+ +g[f+5160>>2];wv(c[j+596>>2]|0,c[b>>2]|0);b=c[h+36>>2]|0}else{d=j+412|0;g[d>>2]=0.0;wv(c[j+596>>2]|0,0);c[b>>2]=0;b=c[e>>2]|0;c[h+36>>2]=b;e=j+404|0}g[j+216>>2]=+(~~(+g[j+20>>2]+ +g[e>>2]+ +g[d>>2])|0);c[i>>2]=b;g[j+248>>2]=0.0;g[j+252>>2]=0.0;Zp(-1);kg(+Uq(-1)*.6499999761581421)}return}function Uq(a){a=a|0;var b=0,d=0,e=0.0;b=c[(Cg()|0)+416>>2]|0;if(!b)Cb(9839,4833,10924,31715);if((a|0)<0)a=c[b+12>>2]|0;d=b+44|0;e=+g[(Xq(d,a+1|0)|0)>>2];return +(+Yq(b,e-+g[(Xq(d,a)|0)>>2]))}function Vq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=0;else a=c[a+12>>2]|0;return a|0}function Wq(){var a=0;a=c[(Cg()|0)+416>>2]|0;if(!a)a=1;else a=c[a+16>>2]|0;return a|0}function Xq(a,b){a=a|0;b=b|0;if((c[a>>2]|0)>(b|0))return (c[a+8>>2]|0)+(b*28|0)|0;else Cb(12740,37262,1030,12749);return 0}function Yq(a,b){a=a|0;b=+b;return +((+g[a+24>>2]-+g[a+20>>2])*b)}function Zq(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0.0;f=c[244]|0;e=c[(c[f+6140>>2]|0)+416>>2]|0;a:do if(e|0){k=f;while(1){if((b|0)<0)b=c[e+12>>2]|0;j=e+44|0;if((b|0)>=(c[j>>2]|0)){b=6;break}f=e+4|0;h=c[f>>2]|0;if((h&4|0)==0?(b|0)<((c[e+16>>2]|0)+-1|0):0){i=+_q(e,b,(a[e+9>>0]|0)!=0);h=c[f>>2]|0;f=1}else{i=0.0;f=0}if(!(h&8))d=+yf(d,+g[e+24>>2]-+g[k+5188>>2]*+((c[e+16>>2]|0)-b|0));l=+$q(e,d-+g[e+20>>2]);g[(Xq(j,b)|0)>>2]=l;if(!f){b=14;break}d=d+ +vg(+g[k+5188>>2],i);k=c[244]|0;e=c[(c[k+6140>>2]|0)+416>>2]|0;if(!e)break a;else b=b+1|0}if((b|0)==6)Cb(9853,4833,10940,31761);else if((b|0)==14)return}while(0);Cb(9839,4833,10936,31761)}function _q(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;if((b|0)<0)b=c[a+12>>2]|0;h=a+44|0;f=Xq(h,b+1|0)|0;if(d){e=+g[f+4>>2];b=(Xq(h,b)|0)+4|0}else{e=+g[f>>2];b=Xq(h,b)|0}return +(+Yq(a,e-+g[b>>2]))}function $q(a,b){a=a|0;b=+b;return +(b/(+g[a+24>>2]-+g[a+20>>2]))}function ar(a,b){a=a|0;b=+b;var d=0;d=c[(Cg()|0)+416>>2]|0;if(!d)Cb(9839,4833,10957,31730);if((a|0)<0)a=c[d+12>>2]|0;Zq(a+1|0,+Hm(a)+b);return}function br(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+32|0;s=u;i=c[244]|0;t=Ii()|0;if((d|0)<=1)Cb(9890,4833,10991,9908);h=t+416|0;if(c[h>>2]|0)Cb(9921,4833,10992,9908);r=(b|0)!=0;fo(r?287454023:d+287454023|0);r=Kg(t,r?b:9949,0)|0;kl();p=cr(t,r)|0;if((c[p>>2]|0)!=(r|0))Cb(9957,4833,11002,9908);c[p+12>>2]=0;q=p+16|0;c[q>>2]=d;r=p+4|0;c[r>>2]=e;c[h>>2]=p;f=+g[t+60>>2];if(!(f!=0.0))f=+g[t+28>>2]-+g[t+132>>2];v=+g[t+404>>2];n=p+20|0;g[n>>2]=v-+g[i+5160>>2];o=p+24|0;g[o>>2]=f-+g[t+104>>2];j=c[t+220>>2]|0;c[p+28>>2]=j;c[p+32>>2]=c[t+240>>2];c[p+40>>2]=j;c[p+36>>2]=j;g[t+412>>2]=0.0;j=t+20|0;g[t+216>>2]=+(~~(+g[j>>2]+v+0.0)|0);k=p+44|0;h=(c[k>>2]|0)==0;a[p+8>>0]=h&1;m=d+1|0;if(h){dr(k,m);f=+(d|0);b=0;do{er(s);g[s>>2]=+(b|0)/f;fr(k,s);b=b+1|0}while((b|0)!=(m|0))}if((c[k>>2]|0)!=(m|0))Cb(9975,4833,11031,9908);if((d|0)>=0){h=i+5188|0;i=t+432|0;b=0;do{e=Xq(k,b)|0;f=+g[e>>2];if(!(c[r>>2]&8))f=+yf(f,+$q(p,+g[o>>2]-+g[n>>2]-+g[h>>2]*+((c[q>>2]|0)-b|0)));g[e>>2]=f;if((b|0)==(d|0))b=b+1|0;else{f=+g[j>>2]+.5;f=+hf(f+ +Hm(b)+-1.0);v=+g[j>>2]+.5;b=b+1|0;al(s,f,-3402823466385288598117041.0e14,+hf(v+ +Hm(b)+-1.0),3402823466385288598117041.0e14);e=e+12|0;c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];mj(e,i)}}while((b|0)!=(m|0))}pv(c[t+596>>2]|0,c[q>>2]|0);Zp(-1);kg(+Uq(-1)*.6499999761581421);l=u;return}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+64|0;e=g;d=a+580|0;a:do if((c[d>>2]|0)>0){a=0;while(1){if((c[(Jt(d,a)|0)>>2]|0)==(b|0))break;a=a+1|0;if((a|0)>=(c[d>>2]|0)){f=5;break a}}a=Jt(d,a)|0}else f=5;while(0);if((f|0)==5){Lt(e);Kt(d,e);Mt(e);a=Nt(d)|0;c[a>>2]=b}l=g;return a|0}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function er(a){a=a|0;Eg(a+12|0);g[a+4>>2]=0.0;g[a>>2]=0.0;c[a+8>>2]=0;return}function fr(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){dr(a,Bu(a,d+1|0)|0);d=c[a>>2]|0}e=c[a+8>>2]|0;c[a>>2]=d+1;a=e+(d*28|0)|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];return}function gr(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0;e=c[244]|0;f=c[e+6140>>2]|0;if((b|0)<=0)Cb(12185,4833,10871,12202);if((c[e+6172>>2]|0)!=((c[a>>2]|0)+b|0))Cb(12225,4833,10872,12202);h=+g[e+204>>2]-+g[e+6188>>2]+4.0-+g[f+20>>2];d=+Hm(b+-1|0);e=e+5188|0;d=+vg(h,d+ +g[e>>2]);if(c[a+4>>2]&4){h=+Hm(b+1|0);d=+yf(d,h-+g[e>>2])}return +d}function hr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Ii()|0;if((a|0)<=0)Cb(10029,4833,11128,31681);e=c[e+416>>2]|0;if(e|0?(c[e+16>>2]|0)!=(a|0):0)zl();if((a|0)!=1)br(b,a,(d^1)&1);return}function ir(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;el(a|0?a:10048);return}function jr(a){a=a|0;var b=0;b=Ii()|0;Up(0.0);b=b+268|0;c[b>>2]=(c[b>>2]|0)+1;Gn(a|0?a:10048);return}function kr(){var a=0;a=Ii()|0;Wp(0.0);a=a+268|0;c[a>>2]=(c[a>>2]|0)+-1;kl();return}function lr(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b?10065:10070;pn(10058,e);l=d;return}function mr(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,g=0,i=0,j=0;j=l;l=l+112|0;i=j+24|0;g=j+8|0;f=j;e=j+40|0;if(!d){c[i>>2]=a;h[i+8>>3]=b;pn(10084,i)}else{c[f>>2]=d;Ef(e,64,10076,f)|0;c[g>>2]=a;h[g+8>>3]=b;pn(e,g)}l=j;return}function nr(b){b=b|0;var d=0;d=b+20|0;c[d>>2]=0;c[d+4>>2]=0;a[d+8>>0]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=-1;a[b+30>>0]=0;a[b+29>>0]=0;return}function or(a,b,c){a=a|0;b=b|0;c=c|0;Of(a,+g[b>>2]*+g[c>>2],+g[b+4>>2]*+g[c+4>>2],+g[b+8>>2]*+g[c+8>>2],+g[b+12>>2]*+g[c+12>>2]);return}function pr(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))bu(a,cu(a,b)|0);c[a>>2]=b;return}function qr(a,b){a=a|0;b=b|0;if((c[a+16>>2]|0)==-1)a=0;else a=(S8(b,a+20|0)|0)==0;return a|0}function rr(a,b){a=a|0;b=b|0;if((+g[b>>2]>=+g[a>>2]?+g[b+4>>2]>=+g[a+4>>2]:0)?+g[b+8>>2]<+g[a+8>>2]:0)a=+g[b+12>>2]<+g[a+12>>2];else a=0;return a|0}function sr(a){a=a|0;var b=0,d=0,e=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+144|0;s=t+136|0;r=t+128|0;q=t+112|0;p=t+96|0;o=t+88|0;n=t+80|0;k=t+64|0;j=t+56|0;i=t+48|0;e=t+40|0;f=t+24|0;d=t+8|0;b=t;if(hi(10391,a,0)|0){c[b>>2]=30079;pn(10405,b);u=+g[(zh()|0)+776>>2];h[d>>3]=1.0e3/u;h[d+8>>3]=u;pn(10414,d);d=zh()|0;m=c[d+788>>2]|0;c[f>>2]=c[d+784>>2];c[f+4>>2]=m;c[f+8>>2]=(m|0)/3|0;pn(10459,f);c[e>>2]=c[(zh()|0)+780>>2];pn(10498,e);cp(10514,10513)|0;qq();m=c[244]|0;tr(m+6088|0,10566);e=m+6372|0;c[i>>2]=c[e>>2];if(_n(10574,10583,i)|0){b=0;do{d=m+6372+(b*12|0)|0;if((c[d>>2]|0)>0){a=0;do{ur(c[(Vi(e,a)|0)>>2]|0);a=a+1|0}while((a|0)<(c[d>>2]|0))}b=b+1|0}while((b|0)!=3);kr()}i=m+6244|0;c[j>>2]=c[i>>2];if(_n(10605,10612,j)|0){if((c[i>>2]|0)>0){e=0;do{a=c[(Dj(i,e)|0)+4>>2]|0;f=c[(Dj(i,e)|0)>>2]|0;if(!a){a=10667;b=58608;d=58608}else{d=c[a+8>>2]|0;a=c[a>>2]|0;b=d&16777216|0?10672:58608;d=d&268435456|0?10685:58608}c[k>>2]=f;c[k+4>>2]=a;c[k+8>>2]=b;c[k+12>>2]=d;lo(10635,k);e=e+1|0}while((e|0)<(c[i>>2]|0))}kr()}if(ao(10696)|0){a=c[m+6148>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[n>>2]=a;pn(10708,n);a=c[m+6152>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[o>>2]=a;pn(10728,o);a=c[m+6164>>2]|0;u=+g[m+6168>>2];c[p>>2]=c[m+6156>>2];c[p+4>>2]=a;h[p+8>>3]=u;pn(10752,p);a=c[m+6176>>2]|0;u=+g[m+6180>>2];c[q>>2]=c[m+6172>>2];c[q+4>>2]=a;h[q+8>>3]=u;pn(10788,q);a=c[m+6196>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[r>>2]=a;pn(10823,r);a=c[m+6144>>2]|0;if(!a)a=10667;else a=c[a>>2]|0;c[s>>2]=a;pn(10844,s);kr()}}Ni();l=t;return}function tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=c[a>>2]|0;c[e>>2]=b;c[e+4>>2]=f;if(_n(b,12275,e)|0){if((c[a>>2]|0)>0){b=0;do{Vt(c[(bi(a,b)|0)>>2]|0,5983);b=b+1|0}while((b|0)<(c[a>>2]|0))}kr()}l=d;return}function ur(b){b=b|0;var d=0,f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0;I=l;l=l+496|0;G=I+88|0;F=I+40|0;H=I+32|0;E=I;d=I+472|0;A=I+168|0;B=I+144|0;C=I+136|0;w=c[b+44>>2]|0;D=b+24|0;x=c[D>>2]|0;z=b+12|0;y=c[z>>2]|0;f=c[b>>2]|0;c[E>>2]=10574;c[E+4>>2]=(w|0)==0?58608:w;c[E+8>>2]=x;c[E+12>>2]=y;c[E+16>>2]=f;f=$n(b,12466,E)|0;if((Qm()|0)==(b|0)){ch(0.0,-1.0);Wt(d,255,100,100,255);Xt(E,d);rn(E,12503,I+24|0);if(f)kr()}else if(f){d=c[244]|0;t=d+6412|0;f=Yt(b)|0;if(f>>>0<(Zt(b)|0)>>>0){u=b+20|0;v=E+16|0;w=E+20|0;x=B+24|0;y=A+300|0;q=d+6448|0;r=E+8|0;s=A+8|0;p=0;while(1){d=c[f+24>>2]|0;if(!d){if(c[f>>2]|0){if((c[z>>2]|0)>0)o=c[u>>2]|0;else o=0;k=f-(Yt(b)|0)>>5;m=(c[z>>2]|0)>0?12614:12622;n=c[f+20>>2]|0;d=f+4|0;M=+g[d>>2];L=+g[f+8>>2];K=+g[f+12>>2];J=+g[f+16>>2];c[F>>2]=c[f>>2];c[F+4>>2]=m;c[F+8>>2]=n;h[F+16>>3]=M;h[F+24>>3]=L;h[F+32>>3]=K;h[F+40>>3]=J;k=$n(k,12549,F)|0;if(a[10513]|0?ih(0)|0:0){Ki(E,d);Eg(A);if((c[f>>2]|0)>0){i=(o|0)==0;d=p;do{if(i)j=d;else j=e[o+(d<<1)>>1]|0;_t(A,$t(D,j)|0);d=d+1|0}while((d|0)<((c[f>>2]|0)+p|0))}au(E);Pv(t,E,r,-16711681,0.0,15,1.0);au(A);Pv(t,A,s,-65281,0.0,15,1.0)}if(k){dq(E,((c[f>>2]|0)>>>0)/3|0,-1.0);n=(o|0)==0;a:while(1){if(!(Bg(E)|0))break;d=c[v>>2]|0;if((d|0)>=(c[w>>2]|0))continue;m=(d*3|0)+p|0;while(1){i=B;do{bf(i);i=i+8|0}while((i|0)!=(x|0));j=0;k=A;while(1){if(n)i=m;else i=e[o+(m<<1)>>1]|0;i=$t(D,i)|0;P=i;O=c[P+4>>2]|0;N=B+(j<<3)|0;c[N>>2]=c[P>>2];c[N+4>>2]=O;J=+g[i>>2];K=+g[i+4>>2];L=+g[i+8>>2];M=+g[i+12>>2];i=c[i+16>>2]|0;c[G>>2]=(j|0)==0?12697:12701;c[G+4>>2]=m;h[G+8>>3]=J;h[G+16>>3]=K;h[G+24>>3]=L;h[G+32>>3]=M;c[G+40>>2]=i;k=k+(Ef(k,y-k|0,12634,G)|0)|0;m=m+1|0;if((j|0)>=2)break;else j=j+1|0}df(C,0.0,0.0);Yp(A,0,0,C)|0;if(ih(0)|0){P=c[q>>2]|0;c[q>>2]=P&-2;Av(t,B,3,-16711681,1,1.0);c[q>>2]=P}d=d+1|0;if((d|0)>=(c[w>>2]|0))continue a}}kr();eq(E)}}}else{P=c[f+28>>2]|0;c[H>>2]=d;c[H+4>>2]=P;lo(12523,H)}p=(c[f>>2]|0)+p|0;f=f+32|0;if(f>>>0>=(Zt(b)|0)>>>0)break}}kr()}l=I;return}function vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function wr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function xr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function yr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function zr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ar(b){b=b|0;a[b>>0]=0;b=b+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function Br(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Cr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Dr(a){a=a|0;var b=0,c=0;bf(a+4|0);bf(a+12|0);b=a+36|0;c=a+20|0;do{bf(c);c=c+8|0}while((c|0)!=(b|0));c=a+52|0;b=a+36|0;do{bf(b);b=b+8|0}while((b|0)!=(c|0));return}function Er(a){a=a|0;nr(a);return}function Fr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Gr(a){a=a|0;Vr(a+4|0);Hr(a+16|0);Hr(a+28|0);$aa(a|0,0,3284)|0;return}function Hr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Ir(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Jr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Kr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Lr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Mr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Nr(a){a=a|0;Mr(a+28|0);Mr(a+16|0);Wr(a+4|0);return}function Or(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Pr(a){a=a|0;Uu(a);Xr(a+104|0);Yr(a+84|0);Zr(a+72|0);_r(a+60|0);$r(a+24|0);Wr(a+12|0);as(a);return}function Qr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Rr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Sr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Tr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Ur(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Vr(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Wr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Xr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Yr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function Zr(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function _r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function $r(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function as(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function bs(a){a=a|0;return c[a+8>>2]|0}function cs(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ds(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function es(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function fs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function gs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function hs(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function is(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function js(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ks(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ls(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ms(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ns(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function os(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ps(a){a=a|0;a=c[a+8>>2]|0;if(a|0)_f(a);return}function qs(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){og(b,rs(b,e+1|0)|0);e=c[b>>2]|0}f=a[d>>0]|0;d=c[b+8>>2]|0;c[b>>2]=e+1;a[d+e>>0]=f;return}function rs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ss(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+32|0;e=d;b=(c[244]|0)+10456|0;us(e);ts(b,e);b=vs(b)|0;c[b>>2]=Af(a)|0;c[b+4>>2]=Gf(a,0,0)|0;l=d;return b|0}function ts(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;if((e|0)==(c[b+4>>2]|0)){ws(b,xs(b,e+1|0)|0);e=c[b>>2]|0}f=c[b+8>>2]|0;c[b>>2]=e+1;b=f+(e*28|0)|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];a[b+24>>0]=a[d+24>>0]|0;return}function us(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;f=d;e=b+8|0;bf(e);h=b+16|0;bf(h);c[b>>2]=0;c[b+4>>2]=0;df(f,0.0,0.0);g=c[f>>2]|0;f=c[f+4>>2]|0;c[h>>2]=g;c[h+4>>2]=f;c[e>>2]=g;c[e+4>>2]=f;a[b+24>>0]=0;l=d;return}function vs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+((b+-1|0)*28|0)|0;else Cb(37253,37262,1040,13011);return 0}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b*28|0)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,(c[a>>2]|0)*28|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function xs(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function ys(a,b){a=a|0;b=b|0;og(a,b);return}function zs(a){a=a|0;var b=0,d=0;b=a+8|0;d=c[b>>2]|0;if(d|0){c[a+4>>2]=0;c[a>>2]=0;_f(d);c[b>>2]=0}return}function As(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;h=Af(b)|0;g=c8(h)|0;i=h+g|0;j=c[244]|0;if((g|0)>0){d=0;b=h;e=0;do{g=b;a:while(1){b=a[g>>0]|0;switch(b<<24>>24){case 10:case 13:break;default:break a}g=g+1|0}if(g>>>0>>0){f=g;b:while(1){switch(b<<24>>24){case 10:case 13:break b;default:{}}b=f+1|0;if(b>>>0>=i>>>0){f=b;break}f=b;b=a[b>>0]|0}a[f>>0]=0;if(f>>>0>g>>>0&(a[g>>0]|0)==91?(k=f+-1|0,(a[k>>0]|0)==93):0){a[k>>0]=0;b=g+1|0;d=Cf(b,k,93)|0;if((d|0)!=0?(l=Cf(d+1|0,k,91)|0,(l|0)!=0):0){a[d>>0]=0;e=l+1|0}else{e=b;b=5983}d=Fi(Gf(b,0,0)|0)|0;if(!d){b=f;e=0;d=0}else{b=f;e=Gd[c[d+8>>2]&63](j,e)|0}}else{b=f;m=18}}else{a[g>>0]=0;b=g;m=18}if((m|0)==18){m=0;if((d|0)!=0&(e|0)!=0)ue[c[d+12>>2]&63](j,e,g)}b=b+1|0}while(b>>>0>>0)}_f(h);return}function Bs(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;h=l;l=l+16|0;d=h;e=c[244]|0;g[e+10452>>2]=0.0;ii(d);f=e+10468|0;if((c[f>>2]|0)>0){b=0;do{oe[c[(Gi(f,b)|0)+16>>2]&127](e,d);b=b+1|0}while((b|0)<(c[f>>2]|0))}Cs(d);Ds(a,d);Es(d);l=h;return}function Cs(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b>>2]|0;c[b>>2]=c[a>>2];c[a>>2]=f;f=b+4|0;d=c[f>>2]|0;e=a+4|0;c[f>>2]=c[e>>2];c[e>>2]=d;e=b+8|0;d=c[e>>2]|0;b=a+8|0;c[e>>2]=c[b>>2];c[b>>2]=d;return}function Es(a){a=a|0;Mr(a);return}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a>>2]|0;e=c[b>>2]|0;b=c[f+8>>2]|0;d=c[e+8>>2]|0;a=(b&67108864)-(d&67108864)|0;if(!a){a=(b&33554432)-(d&33554432)|0;if(!a)a=(c[f+148>>2]|0)-(c[e+148>>2]|0)|0}return a|0}function Gs(b,d){b=b|0;d=d|0;var e=0,f=0;Xi(b,c[d+596>>2]|0);e=d+300|0;if((c[e>>2]|0)>0){d=0;do{f=c[(bi(e,d)|0)>>2]|0;do if(a[f+140>>0]|0){if(c[f+8>>2]&67108864|0?(c[f+184>>2]|0)>0:0)break;Gs(b,f)}while(0);d=d+1|0}while((d|0)<(c[e>>2]|0))}return}function Hs(a){a=a|0;return (c[a>>2]|0)==0|0}function Is(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0)return (c[a+8>>2]|0)+(b+-1<<5)|0;else Cb(37253,37262,1040,13011);return 0}function Js(a){a=a|0;var b=0;b=c[a>>2]|0;if((b|0)>0){c[a>>2]=b+-1;return}else Cb(37253,37262,1061,12905)}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Ls(a,Ms(a,d+1|0)|0);d=c[a>>2]|0}e=c[b>>2]|0;b=c[a+8>>2]|0;c[a>>2]=d+1;c[b+(d<<2)>>2]=e;return}function Ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<2)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<2|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ms(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Ns(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;if((d|0)==(c[a+4>>2]|0)){Os(a,Ps(a,d+1|0)|0);d=c[a>>2]|0}f=c[a+8>>2]|0;c[a>>2]=d+1;e=b;a=c[e+4>>2]|0;b=f+(d<<3)|0;c[b>>2]=c[e>>2];c[b+4>>2]=a;return}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=a+4|0;if((c[f>>2]|0)<(b|0)){g=Bf(b<<3)|0;e=a+8|0;d=c[e>>2]|0;if(!d)a=e;else{Zaa(g|0,d|0,c[a>>2]<<3|0)|0;a=e;d=c[e>>2]|0}_f(d);c[a>>2]=g;c[f>>2]=b}return}function Ps(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Qs(a){a=a|0;Rs(a+84|0,0);return}function Rs(a,b){a=a|0;b=b|0;if((c[a+4>>2]|0)<(b|0))Os(a,Ps(a,b)|0);c[a>>2]=b;return}function Ss(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=a+8|0;f=c[g>>2]|0;if(f>>>0<=b>>>0?(e=c[a>>2]|0,(f+(e<<2)|0)>>>0>=b>>>0):0){b=b-f>>2;if((e|0)==(c[a+4>>2]|0)){Oi(a,Ts(a,e+1|0)|0);e=c[a>>2]|0}if((e|0)>(b|0)){f=(c[g>>2]|0)+(b<<2)|0;_aa(f+4|0,f|0,e-b<<2|0)|0;e=c[a>>2]|0}c[(c[g>>2]|0)+(b<<2)>>2]=c[d>>2];c[a>>2]=e+1;return (c[g>>2]|0)+(b<<2)|0}Cb(11501,37262,1065,11531);return 0}function Ts(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;if(!a)a=8;else a=((a|0)/2|0)+a|0;return ((a|0)>(b|0)?a:b)|0}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0;e=+Wh(+g[b>>2],+g[c>>2],+g[d>>2]);df(a,e,+Wh(+g[b+4>>2],+g[c+4>>2],+g[d+4>>2]));return}function Vs(a){a=a|0;bf(a+4|0);bf(a+12|0);bf(a+20|0);return}function Ws(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];a=a+4|0;g[a>>2]=+g[a>>2]-+g[b+4>>2];return}function Xs(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function Ys(b){b=b|0;var d=0,e=0,f=0;d=c[(c[244]|0)+6140>>2]|0;c[b>>2]=c[d+272>>2];f=d+276|0;e=b+4|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+20>>0]=a[d+292>>0]|0;return}function Zs(a){a=a|0;return ((a|0)>65535?0:a)|0}function _s(a){a=a|0;return c[a+44>>2]|0}function $s(a,c,d){a=a|0;c=c|0;d=d|0;c=rt(c+24|0,d,1,1)|0;if(c|0)b[c>>1]=qt(a,d)|0;return}function at(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;d=(c[a+12>>2]|0)+(d<<1)|0;f=d+(e<<1)|0;h=Lf(d,f)|0;g=a+40|0;c[g>>2]=(c[g>>2]|0)-h;a=a+44|0;c[a>>2]=(c[a>>2]|0)-e;a=b[f>>1]|0;if(a<<16>>16){e=d;while(1){f=f+2|0;d=e+2|0;b[e>>1]=a;a=b[f>>1]|0;if(!(a<<16>>16))break;else e=d}}b[d>>1]=0;return}function bt(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;j=a+44|0;g=c[j>>2]|0;if((g|0)<(d|0))Cb(12072,4833,8258,12088);k=a+4|0;if((g+f|0)<(c[k>>2]|0)?(h=Lf(e,e+(f<<1)|0)|0,i=a+40|0,((c[i>>2]|0)+h|0)<(c[a+48>>2]|0)):0){a=(c[a+12>>2]|0)+(d<<1)|0;if((g|0)!=(d|0))_aa(a+(f<<1)|0,a|0,g-d<<1|0)|0;Zaa(a|0,e|0,f<<1|0)|0;a=(c[j>>2]|0)+f|0;c[j>>2]=a;c[i>>2]=(c[i>>2]|0)+h;b[(vt(k,a)|0)>>1]=0;a=1}else a=0;return a|0}function ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;it(b,d);e=d+4|0;f=c[e>>2]|0;g=d+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){if((f|0)<(h|0)){pt(b,d,f,h-f|0);b=c[e>>2]|0;c[g>>2]=b}else{pt(b,d,h,f-h|0);b=c[g>>2]|0;c[e>>2]=b}c[d>>2]=b;a[d+15>>0]=0}return}function dt(a,b,c){a=a|0;b=b|0;c=c|0;rt(a+24|0,b,0,c)|0;return}function et(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,o=0,p=0,q=0;i=d+24|0;q=d+3210|0;f=b[q>>1]|0;a:do if(f<<16>>16){l=(f<<16>>16)+-1|0;o=c[d+24+(l*12|0)>>2]|0;m=b[d+24+(l*12|0)+4>>1]|0;k=b[d+24+(l*12|0)+6>>1]|0;l=b[d+24+(l*12|0)+8>>1]|0;p=d+3212|0;n=(b[p>>1]|0)+-1|0;b[d+24+(n*12|0)+8>>1]=-1;f=d+24+(n*12|0)+4|0;b[f>>1]=k;b[d+24+(n*12|0)+6>>1]=m;c[d+24+(n*12|0)>>2]=o;if(k<<16>>16){h=d+3214|0;g=b[h>>1]|0;n=k<<16>>16;if(((g<<16>>16)+n|0)<=998){j=d+3216|0;f=b[j>>1]|0;if(((g<<16>>16)+n|0)>(f|0))do{wt(i);if((b[p>>1]|0)==99)break a;f=b[j>>1]|0}while(((b[h>>1]|0)+n|0)>(f|0));g=d+24+(((b[p>>1]|0)+-1|0)*12|0)+8|0;b[g>>1]=f-n;b[j>>1]=(e[j>>1]|0)-n;if(k<<16>>16>0){f=0;do{k=qt(a,f+o|0)|0;b[d+1212+(f+(b[g>>1]|0)<<1)>>1]=k;f=f+1|0}while((f|0)!=(n|0))}}else b[f>>1]=0;at(a,o,n)}if(!(m<<16>>16))f=0;else{f=m<<16>>16;bt(a,o,d+1212+(l<<16>>16<<1)|0,f)|0;a=d+3214|0;b[a>>1]=(e[a>>1]|0)-f}c[d>>2]=o+f;b[q>>1]=(b[q>>1]|0)+-1<<16>>16;b[p>>1]=(b[p>>1]|0)+-1<<16>>16}while(0);return}function ft(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,o=0,p=0,q=0,r=0;r=d+3212|0;f=b[r>>1]|0;if(f<<16>>16!=99){j=f<<16>>16;q=d+3210|0;n=b[q>>1]|0;p=c[d+24+(j*12|0)>>2]|0;k=b[d+24+(j*12|0)+4>>1]|0;f=b[d+24+(j*12|0)+6>>1]|0;j=b[d+24+(j*12|0)+8>>1]|0;i=d+24+(n*12|0)+6|0;b[i>>1]=k;l=d+24+(n*12|0)+4|0;b[l>>1]=f;m=d+24+(n*12|0)|0;c[m>>2]=p;n=d+24+(n*12|0)+8|0;b[n>>1]=-1;if(f<<16>>16){g=d+3214|0;h=b[g>>1]|0;o=f<<16>>16;if((o+(h<<16>>16)|0)<=(b[d+3216>>1]|0)){b[n>>1]=h;b[g>>1]=(f&65535)+(h&65535);if(f<<16>>16>0){f=0;do{i=qt(a,(c[m>>2]|0)+f|0)|0;b[d+1212+(f+(b[n>>1]|0)<<1)>>1]=i;f=f+1|0}while((f|0)<(b[l>>1]|0))}}else{b[l>>1]=0;b[i>>1]=0}at(a,p,o)}if(!(k<<16>>16))f=0;else{f=k<<16>>16;bt(a,p,d+1212+(j<<16>>16<<1)|0,f)|0;a=d+3216|0;b[a>>1]=(e[a>>1]|0)+f}c[d>>2]=p+f;b[q>>1]=(b[q>>1]|0)+1<<16>>16;b[r>>1]=(b[r>>1]|0)+1<<16>>16}return}function gt(b){b=b|0;var d=0,e=0;d=b+4|0;e=b+8|0;if((c[d>>2]|0)!=(c[e>>2]|0)){xt(b);d=c[d>>2]|0;c[b>>2]=d;c[e>>2]=d;a[b+15>>0]=0}return}function ht(b,d){b=b|0;d=d|0;var e=0,f=0;e=d+4|0;f=d+8|0;if((c[e>>2]|0)!=(c[f>>2]|0)){xt(d);it(b,d);f=c[f>>2]|0;c[d>>2]=f;c[e>>2]=f;a[d+15>>0]=0}return}function it(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=_s(a)|0;e=b+4|0;d=c[e>>2]|0;f=b+8|0;a=c[f>>2]|0;if((d|0)!=(a|0)){if((d|0)>(g|0)){c[e>>2]=g;d=g}if((a|0)>(g|0)){c[f>>2]=g;a=g}if((d|0)==(a|0))c[b>>2]=d}if((c[b>>2]|0)>(g|0))c[b>>2]=g;return}function jt(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;d=a+8|0;e=c[d>>2]|0;if((c[b>>2]|0)==(e|0)){e=c[a>>2]|0;c[d>>2]=e;c[b>>2]=e}else c[a>>2]=e;return}function kt(a,b){a=a|0;b=b|0;var c=0;do{c=b;b=b+-1|0;if((c|0)<=0)break}while(!(yt(a,b)|0));return ((b|0)>0?b:0)|0}function lt(a,b){a=a|0;b=b|0;var d=0;d=c[a+44>>2]|0;do{b=b+1|0;if((b|0)>=(d|0))break}while(!(yt(a,b)|0));return ((b|0)>(d|0)?d:b)|0} +function VR(a){a=a|0;return YR()|0}function WR(){return 35466}function XR(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;YG(g,b);YG(h,c);YG(i,d);YG(j,e);Ae[a&15](g,h,i,j);IG(j);IG(i);IG(h);IG(g);l=f;return}function YR(){return 2784}function ZR(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;f=h+8|0;g=h;if(!(FJ(d)|0)?!(OF(d)|0):0){if((a[42632]|0)==0?Haa(42632)|0:0)aH(58008,d);if((a[42640]|0)==0?Haa(42640)|0:0)aH(58012,e);uH(f,b);uH(g,c);Dm(f,g,$R(68)|0,0)}else{uH(f,b);uH(g,c);Dm(f,g,0,0)}l=h;return}function _R(a){a=a|0;aS(a);return}function $R(a){a=a|0;return a|0}function aS(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bS(d,f);cN(d,35041,58012);dN(e,58008,d);IG(e);IG(d);l=b;return}function bS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cS(e,b);b=dS()|0;c[a>>2]=pc(b|0,eS(e)|0)|0;l=d;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hS(e,gS(c[b>>2]|0)|0);eG(e);l=d;return}function dS(){return fS()|0}function eS(a){a=a|0;return a|0}function fS(){return 224}function gS(a){a=a|0;return a|0}function hS(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iS(a){a=a|0;return 3}function jS(a){a=a|0;return lS()|0}function kS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;YG(e,b);c=WG(c)|0;oe[a&127](e,c);IG(e);l=d;return}function lS(){return 2804}function mS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);gi(d,b);l=c;return}function nS(a){a=a|0;return 4}function oS(a){a=a|0;return qS()|0}function pS(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);c=WG(c)|0;YG(g,d);ue[a&63](f,c,g);IG(g);IG(f);l=e;return}function qS(){return 2816}function rS(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,c);pk(f,b,e);l=d;return}function sS(a){a=a|0;return 2}function tS(a){a=a|0;return wS()|0}function uS(){return 35542}function vS(a,b){a=a|0;b=+b;b=+XG(b);fe[a&15](b);return}function wS(){return 2832}function xS(a){a=a|0;return 1}function yS(a){a=a|0;return rH(Bd[a&31]()|0)|0}function zS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;zk(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function AS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function BS(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Qm()|0;tJ(a,d);l=b;return}function CS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Km(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function DS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Jm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function ES(a){a=a|0;return 1}function FS(){return 35546}function GS(a){a=a|0;var b=0.0,c=0,d=0;c=l;l=l+16|0;d=c;g[d>>2]=+xd[a&31]();b=+kH(d);l=c;return +b}function HS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Ol(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IS(a){a=a|0;return 2}function JS(a){a=a|0;return LS()|0}function KS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+4|0;d=c;YG(d,b);oe[a&127](e,d);b=HG(e)|0;IG(e);IG(d);l=c;return b|0}function LS(){return 2840}function MS(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;qh(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function NS(a){a=a|0;return 5}function OS(a){a=a|0;return QS()|0}function PS(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;YG(g,b);YG(h,c);d=FH(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);IG(g);l=f;return e|0}function QS(){return 2848}function RS(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;i=l;l=l+32|0;g=i+8|0;h=i;iL(g,b);eH(h,34972);j=jL(g,h)|0;IG(h);IG(g);if(j){kG(g,b);j=a[g+11>>0]|0;b=c[g>>2]|0;uH(h,d);b=vk(j<<24>>24<0?b:g,h,e,f)|0;T9(g)}else{b=WO(b)|0;uH(g,d);b=xk(b,g,e,f)|0}l=i;return b|0}function SS(a){a=a|0;return 4}function TS(a){a=a|0;return VS()|0}function US(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function VS(){return 2868}function WS(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,0,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=hi(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function XS(a){a=a|0;return 2}function YS(a){a=a|0;return _S()|0}function ZS(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);je[a&127](d);T9(d);l=c;return}function _S(){return 2884}function $S(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(!(OF(b)|0)){a[c>>0]=a[d>>0]|0;aT(b,c)|0}l=d;return}function aT(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(bT(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=cT(f)|0;TF(e);l=d;return b|0}function bT(a){a=a|0;return eT()|0}function cT(a){a=+a;return TJ(dT(a)|0)|0}function dT(a){a=+a;return ~~a>>>0|0}function eT(){return 2892}function fT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(OF(b)|0)sr(0);else{c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;sr(d);c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function gT(a){a=a|0;return 2}function hT(a){a=a|0;return jT()|0}function iT(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);je[a&127](d);IG(d);l=c;return}function jT(){return 2896}function kT(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+16|0;d=g+8|0;e=g+4|0;f=g;if(!(OF(b)|0)){c[f>>2]=0;AK(e,b,f);h=BK(e)|0;IG(e);a[d>>0]=h&1;c[e>>2]=0;CK(f,d);cI(b,e,f);IG(f)}l=g;return}function lT(){Ri();return}function mT(a){a=a|0;return 1}function nT(a){a=a|0;return qT()|0}function oT(){return 35549}function pT(a){a=a|0;ee[a&63]();return}function qT(){return 2904}function rT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bh()|0;sT(a,d);l=b;return}function sT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;tT(e,b);b=uT()|0;c[a>>2]=pc(b|0,vT(e)|0)|0;l=d;return}function tT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;yT(e,xT(c[b>>2]|0)|0);eG(e);l=d;return}function uT(){return wT()|0}function vT(a){a=a|0;return a|0}function wT(){return 248}function xT(a){a=a|0;return a|0}function yT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function zT(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Ah()|0;AT(a,d);l=b;return}function AT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;BT(e,b);b=CT()|0;c[a>>2]=pc(b|0,DT(e)|0)|0;l=d;return}function BT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;GT(e,FT(c[b>>2]|0)|0);eG(e);l=d;return}function CT(){return ET()|0}function DT(a){a=a|0;return a|0}function ET(){return 136}function FT(a){a=a|0;return a|0}function GT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function HT(a){a=a|0;return 1}function IT(a){a=a|0;return rR()|0}function JT(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if(!(a[58609]|0)){a[58609]=1;c[(zh()|0)+16>>2]=0;c[(zh()|0)+20>>2]=0}c[d>>2]=zh()|0;KT(b,d);l=e;return}function KT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;LT(e,b);b=MT()|0;c[a>>2]=pc(b|0,NT(e)|0)|0;l=d;return}function LT(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;QT(e,PT(c[b>>2]|0)|0);eG(e);l=d;return}function MT(){return OT()|0}function NT(a){a=a|0;return a|0}function OT(){return 272}function PT(a){a=a|0;return a|0}function QT(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function RT(a){a=a|0;return a|0}function ST(){return UT()|0}function TT(a){a=a|0;return a|0}function UT(){return 920}function VT(){return XT()|0}function WT(a){a=a|0;return a|0}function XT(){return 32}function YT(a){a=a|0;fG(a,1);return}function ZT(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;_T();g=$T()|0;d=aU()|0;n=bU()|0;m=cU()|0;k=dU()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,26,h|0,g|0,f|0,d|0,35598,oT()|0,69);d=bU()|0;f=iU(b)|0;g=bT(b)|0;Tb(d|0,f|0,g|0,rG()|0,27,16);c[b>>2]=0;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35609,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(42)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35615,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=12;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35632,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=16;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35647,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(43)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35664,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(44)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35681,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=36;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35701,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=40;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35715,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=44;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35731,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=48;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35745,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(45)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35761,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=60;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,35777,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=64;g=bU()|0;f=lU()|0;d=iQ()|0;h=mU(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,35791,f|0,d|0,4,h|0,i|0,j|0,2,mU(b)|0);c[b>>2]=qU(46)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35807,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(47)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35822,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(48)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35842,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=92;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35863,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=96;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35877,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=100;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35895,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=104;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35909,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=108;d=bU()|0;h=lU()|0;i=iQ()|0;j=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,35927,h|0,i|0,4,j|0,f|0,g|0,2,mU(b)|0);c[b>>2]=112;g=bU()|0;f=lU()|0;j=iQ()|0;i=mU(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,35939,f|0,j|0,4,i|0,h|0,d|0,2,mU(b)|0);c[b>>2]=qU(49)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35952,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=qU(50)|0;j=bU()|0;i=rU(e)|0;h=sU(e)|0;d=EG()|0;Ub(j|0,35971,i|0,h|0,d|0,29,tU(b)|0,0);c[b>>2]=qU(51)|0;d=bU()|0;h=rU(e)|0;i=sU(e)|0;j=EG()|0;Ub(d|0,35995,h|0,i|0,j|0,29,tU(b)|0,0);c[b>>2]=140;j=bU()|0;i=EU()|0;h=EG()|0;d=FU(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36021,i|0,h|0,30,d|0,f|0,g|0,16,FU(b)|0);c[b>>2]=141;g=bU()|0;f=EU()|0;d=EG()|0;h=FU(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36038,f|0,d|0,30,h|0,i|0,j|0,16,FU(b)|0);c[b>>2]=144;j=bU()|0;i=lU()|0;h=iQ()|0;d=mU(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36054,i|0,h|0,4,d|0,f|0,g|0,2,mU(b)|0);c[b>>2]=JU(17)|0;g=bU()|0;f=KU(e)|0;d=LU(e)|0;h=VH()|0;Ub(g|0,36075,f|0,d|0,h|0,36,MU(b)|0,0);c[b>>2]=PU(37)|0;h=bU()|0;d=QU(e)|0;f=RU(e)|0;g=DH()|0;Ub(h|0,36087,d|0,f|0,g|0,18,SU(b)|0,0);c[b>>2]=4;c[b+4>>2]=0;g=bU()|0;f=UU(e)|0;e=VU(e)|0;d=dQ()|0;Ub(g|0,36099,f|0,e|0,d|0,3,WU(b)|0,0);l=a;return}function _T(){return}function $T(){return 0}function aU(){return 0}function bU(){return FV()|0}function cU(){return EV()|0}function dU(){return DV()|0}function eU(){return 0}function fU(){return 36131}function gU(a){a=a|0;return CV(a)|0}function hU(a){a=a|0;if(a|0)Q9(a);return}function iU(a){a=a|0;return 1}function jU(a){a=a|0;return FT(Bd[a&31]()|0)|0}function kU(){var a=0;a=P9(836)|0;af(a);return a|0}function lU(){return BV()|0}function mU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function nU(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function oU(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function pU(a,b){a=a|0;b=b|0;AV(a,b);return}function qU(a){a=a|0;return a|0}function rU(a){a=a|0;return 2}function sU(a){a=a|0;return zV()|0}function tU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function uU(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=TJ(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function vU(a,b){a=a|0;b=b|0;yV(a,b);return}function wU(a,b){a=a|0;b=b|0;xV(a,b);return}function xU(a,b){a=a|0;b=b|0;wV(a,b);return}function yU(a,b){a=a|0;b=b|0;vV(a,b);return}function zU(a,b){a=a|0;b=b|0;uV(a,b);return}function AU(a,b){a=a|0;b=b|0;tV(a,b);return}function BU(a,b){a=a|0;b=b|0;sV(a,b);return}function CU(a,b){a=a|0;b=b|0;rV(a,b);return}function DU(a,b){a=a|0;b=b|0;jV(a,b);return}function EU(){return iV()|0}function FU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function GU(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function HU(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function IU(a,b,c){a=a|0;b=b|0;c=c|0;aV(a,b,c);return}function JU(a){a=a|0;return a|0}function KU(a){a=a|0;return 3}function LU(a){a=a|0;return $U()|0}function MU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NU(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;ue[a&63](f,b,d);d=HG(f)|0;IG(f);l=e;return d|0}function OU(a,b,c){a=a|0;b=b|0;c=c|0;return _U(a,b,c)|0}function PU(a){a=a|0;return a|0}function QU(a){a=a|0;return 4}function RU(a){a=a|0;return ZU()|0}function SU(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function TU(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;a=c[a>>2]|0;b=TJ(b)|0;d=WG(d)|0;YG(g,e);e=rH(Od[a&63](b,d,g)|0)|0;IG(g);l=f;return e|0}function UU(a){a=a|0;return 3}function VU(a){a=a|0;return YU()|0}function WU(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function XU(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0;f=TJ(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;d=+XG(d);ke[b&7](a,d);return}function YU(){return 2908}function ZU(){return 2920}function _U(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(b>>>0<43){a=a+148+(b<<4)|0;IL(e,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];a=1}else a=0;l=f;return a|0}function $U(){return 2936}function aV(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=b+148+(d<<4);if(d>>>0<43)bV(a,e);else YT(a);l=f;return}function bV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;cV(e,b);b=dV()|0;c[a>>2]=pc(b|0,eV(e)|0)|0;l=d;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;hV(e,gV(c[b>>2]|0)|0);eG(e);l=d;return}function dV(){return fV()|0}function eV(a){a=a|0;return a|0}function fV(){return 296}function gV(a){a=a|0;return a|0}function hV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function iV(){return 864}function jV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+132;kV(a,e);l=d;return}function kV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lV(e,b);b=mV()|0;c[a>>2]=pc(b|0,nV(e)|0)|0;l=d;return}function lV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qV(e,pV(c[b>>2]|0)|0);eG(e);l=d;return}function mV(){return oV()|0}function nV(a){a=a|0;return a|0}function oV(){return 312}function pV(a){a=a|0;return a|0}function qV(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+124;kV(a,e);l=d;return}function sV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+116;kV(a,e);l=d;return}function tV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+84;kV(a,e);l=d;return}function uV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+76;kV(a,e);l=d;return}function vV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+68;kV(a,e);l=d;return}function wV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+52;kV(a,e);l=d;return}function xV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+28;kV(a,e);l=d;return}function yV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;kV(a,e);l=d;return}function zV(){return 2948}function AV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;kV(a,e);l=d;return}function BV(){return 944}function CV(a){a=a|0;return 152}function DV(){return 328}function EV(){return 136}function FV(){return 152}function GV(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;HV();h=IV()|0;f=JV()|0;n=KV()|0;m=LV()|0;k=MV()|0;i=eU()|0;j=rG()|0;d=fU()|0;g=fU()|0;Sb(n|0,m|0,k|0,i|0,j|0,28,d|0,h|0,g|0,f|0,36148,oT()|0,70);c[b>>2]=QV(52)|0;f=KV()|0;g=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(f|0,36156,g|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=8;d=KV()|0;h=lU()|0;g=iQ()|0;f=VV(b)|0;j=lU()|0;i=dQ()|0;Vb(d|0,36171,h|0,g|0,5,f|0,j|0,i|0,4,VV(b)|0);c[b>>2]=ZV(32)|0;i=KV()|0;j=_V(e)|0;f=$V(e)|0;g=VH()|0;Ub(i|0,36181,j|0,f|0,g|0,38,aW(b)|0,0);c[b>>2]=dW(39)|0;g=KV()|0;f=eW(e)|0;j=fW(e)|0;i=DH()|0;Ub(g|0,36193,f|0,j|0,i|0,19,gW(b)|0,0);c[b>>2]=QV(53)|0;i=KV()|0;j=RV(e)|0;f=SV(e)|0;g=EG()|0;Ub(i|0,36205,j|0,f|0,g|0,31,TV(b)|0,0);c[b>>2]=128;g=KV()|0;f=lU()|0;j=iQ()|0;i=VV(b)|0;h=lU()|0;d=dQ()|0;Vb(g|0,36214,f|0,j|0,5,i|0,h|0,d|0,4,VV(b)|0);c[b>>2]=QV(54)|0;d=KV()|0;h=RV(e)|0;i=SV(e)|0;j=EG()|0;Ub(d|0,36230,h|0,i|0,j|0,31,TV(b)|0,0);c[b>>2]=QV(55)|0;j=KV()|0;i=RV(e)|0;h=SV(e)|0;d=EG()|0;Ub(j|0,36257,i|0,h|0,d|0,31,TV(b)|0,0);c[b>>2]=mW(33)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36269,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(41)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36284,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=216;d=KV()|0;h=lU()|0;i=iQ()|0;j=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(d|0,36299,h|0,i|0,5,j|0,f|0,g|0,4,VV(b)|0);c[b>>2]=220;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36310,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=221;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36326,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=222;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36334,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=223;d=KV()|0;h=EU()|0;i=EG()|0;j=xW(b)|0;f=EU()|0;g=eL()|0;Vb(d|0,36343,h|0,i|0,34,j|0,f|0,g|0,18,xW(b)|0);c[b>>2]=224;g=KV()|0;f=EU()|0;j=EG()|0;i=xW(b)|0;h=EU()|0;d=eL()|0;Vb(g|0,36350,f|0,j|0,34,i|0,h|0,d|0,18,xW(b)|0);c[b>>2]=mW(35)|0;d=KV()|0;h=nW(e)|0;i=oW(e)|0;j=VH()|0;Ub(d|0,36359,h|0,i|0,j|0,40,pW(b)|0,0);c[b>>2]=sW(42)|0;j=KV()|0;i=tW(e)|0;h=uW(e)|0;d=DH()|0;Ub(j|0,36373,i|0,h|0,d|0,20,vW(b)|0,0);c[b>>2]=56;c[b+4>>2]=0;d=KV()|0;h=CW(e)|0;i=DW(e)|0;j=eL()|0;Ub(d|0,36387,h|0,i|0,j|0,19,EW(b)|0,0);c[b>>2]=772;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36405,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=773;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36422,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=774;j=KV()|0;i=EU()|0;h=EG()|0;d=xW(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,36442,i|0,h|0,34,d|0,f|0,g|0,18,xW(b)|0);c[b>>2]=775;g=KV()|0;f=EU()|0;d=EG()|0;h=xW(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36456,f|0,d|0,34,h|0,i|0,j|0,18,xW(b)|0);c[b>>2]=776;j=KV()|0;i=lU()|0;h=iQ()|0;d=VV(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,36470,i|0,h|0,5,d|0,f|0,g|0,4,VV(b)|0);c[b>>2]=QV(57)|0;g=KV()|0;f=RV(e)|0;d=SV(e)|0;h=EG()|0;Ub(g|0,36480,f|0,d|0,h|0,31,TV(b)|0,0);c[b>>2]=IW(6)|0;h=KV()|0;d=JW(e)|0;f=KW(e)|0;g=LW()|0;Ub(h|0,36494,d|0,f|0,g|0,1,MW(b)|0,0);c[b>>2]=IW(7)|0;g=KV()|0;f=JW(e)|0;e=KW(e)|0;d=LW()|0;Ub(g|0,36517,f|0,e|0,d|0,1,MW(b)|0,0);l=a;return}function HV(){return}function IV(){return 0}function JV(){return 0}function KV(){return uX()|0}function LV(){return tX()|0}function MV(){return sX()|0}function NV(a){a=a|0;return rX(a)|0}function OV(a){a=a|0;if(a|0)Q9(a);return}function PV(a,b){a=a|0;b=b|0;qX(a,b);return}function QV(a){a=a|0;return a|0}function RV(a){a=a|0;return 2}function SV(a){a=a|0;return pX()|0}function TV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function UV(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=UW(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function VV(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function WV(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function XV(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function YV(a,b){a=a|0;b=b|0;return oX(a,b)|0}function ZV(a){a=a|0;return a|0}function _V(a){a=a|0;return 3}function $V(a){a=a|0;return nX()|0}function aW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function bW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;c[f>>2]=Gd[a&63](b,d)|0;d=RH(f)|0;l=e;return d|0}function cW(a,b,c){a=a|0;b=b|0;c=c|0;return mX(a,b,c)|0}function dW(a){a=a|0;return a|0}function eW(a){a=a|0;return 4}function fW(a){a=a|0;return lX()|0}function gW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function hW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=WG(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function iW(a,b){a=a|0;b=b|0;dX(a,b);return}function jW(a,b){a=a|0;b=b|0;cX(a,b);return}function kW(a,b){a=a|0;b=b|0;bX(a,b);return}function lW(a,b){a=a|0;b=b|0;return aX(a,b)|0}function mW(a){a=a|0;return a|0}function nW(a){a=a|0;return 3}function oW(a){a=a|0;return $W()|0}function pW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function qW(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;return rH(Gd[a&63](b,d)|0)|0}function rW(a,b,c){a=a|0;b=b|0;c=c|0;return _W(a,b,c)|0}function sW(a){a=a|0;return a|0}function tW(a){a=a|0;return 4}function uW(a){a=a|0;return ZW()|0}function vW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function wW(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a>>2]|0;b=UW(b)|0;d=WG(d)|0;e=FH(e)|0;return rH(Od[a&63](b,d,e)|0)|0}function xW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function yW(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function zW(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function AW(a,b){a=a|0;b=b|0;return YW(a,b)|0}function BW(a,b,c){a=a|0;b=b|0;c=c|0;return XW(a,b,c)|0}function CW(a){a=a|0;return 3}function DW(a){a=a|0;return WW()|0}function EW(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function FW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=UW(b)|0;b=c[a>>2]|0;e=c[a+4>>2]|0;a=f+(e>>1)|0;if(e&1)b=c[(c[a>>2]|0)+b>>2]|0;f=VW(d)|0;oe[b&127](a,f);return}function GW(a,b){a=a|0;b=b|0;TW(a,b);return}function HW(a,b){a=a|0;b=b|0;return +(+SW(a,b))}function IW(a){a=a|0;return a|0}function JW(a){a=a|0;return 3}function KW(a){a=a|0;return RW()|0}function LW(){return 36539}function MW(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function NW(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0;f=l;l=l+16|0;h=f;a=c[a>>2]|0;b=QW(b)|0;d=WG(d)|0;g[h>>2]=+zd[a&15](b,d);e=+kH(h);l=f;return +e}function OW(a,b){a=a|0;b=b|0;return +(+PW(a,b))}function PW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<512)c=+g[a+992+(b<<2)>>2];else c=-1.0;return +c}function QW(a){a=a|0;return a|0}function RW(){return 2956}function SW(a,b){a=a|0;b=b|0;var c=0.0;if(b>>>0<5)c=+g[a+892+(b<<2)>>2];else c=-1.0;return +c}function TW(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+796;kV(a,e);l=d;return}function UW(a){a=a|0;return a|0}function VW(a){a=a|0;return a|0}function WW(){return 2968}function XW(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<512){a[b+225+c>>0]=d&1;b=1}else b=0;return b|0}function YW(b,c){b=b|0;c=c|0;if(c>>>0<512)b=(a[b+225+c>>0]|0)!=0;else b=0;return b|0}function ZW(){return 2980}function _W(b,c,d){b=b|0;c=c|0;d=d|0;if(c>>>0<5){a[b+208+c>>0]=d&1;b=1}else b=0;return b|0}function $W(){return 2996}function aX(b,c){b=b|0;c=c|0;if(c>>>0<5)b=(a[b+208+c>>0]|0)!=0;else b=0;return b|0}function bX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+200;kV(a,e);l=d;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+140;kV(a,e);l=d;return}function dX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=c[b+124>>2];eX(a,e);l=d;return}function eX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fX(e,b);b=gX()|0;c[a>>2]=pc(b|0,hX(e)|0)|0;l=d;return}function fX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kX(e,jX(c[b>>2]|0)|0);eG(e);l=d;return}function gX(){return iX()|0}function hX(a){a=a|0;return a|0}function iX(){return 360}function jX(a){a=a|0;return a|0}function kX(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lX(){return 3008}function mX(a,b,d){a=a|0;b=b|0;d=d|0;if(b>>>0<19){c[a+36+(b<<2)>>2]=d;a=1}else a=0;return a|0}function nX(){return 3024}function oX(a,b){a=a|0;b=b|0;if(b>>>0<19)a=c[a+36+(b<<2)>>2]|0;else a=-1;return a|0}function pX(){return 3036}function qX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;kV(a,e);l=d;return}function rX(a){a=a|0;return 288}function sX(){return 344}function tX(){return 272}function uX(){return 288}function vX(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;wX();d=xX()|0;g=yX()|0;n=zX()|0;m=AX()|0;k=BX()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,29,h|0,d|0,f|0,g|0,36584,oT()|0,71);c[b>>2]=FX(58)|0;g=zX()|0;f=GX(e)|0;d=HX(e)|0;h=EG()|0;Ub(g|0,36596,f|0,d|0,h|0,36,IX(b)|0,0);c[b>>2]=LX(59)|0;h=zX()|0;d=MX(e)|0;f=NX(e)|0;g=EG()|0;Ub(h|0,36615,d|0,f|0,g|0,37,OX(b)|0,0);c[b>>2]=RX(60)|0;g=zX()|0;f=SX(e)|0;e=TX(e)|0;d=eL()|0;Ub(g|0,36624,f|0,e|0,d|0,20,UX(b)|0,0);c[b>>2]=20;d=zX()|0;e=WX()|0;f=EG()|0;g=XX(b)|0;h=WX()|0;i=eL()|0;Vb(d|0,36633,e|0,f|0,38,g|0,h|0,i|0,21,XX(b)|0);c[b>>2]=24;i=zX()|0;h=WX()|0;g=EG()|0;f=XX(b)|0;e=WX()|0;d=eL()|0;Vb(i|0,36642,h|0,g|0,38,f|0,e|0,d|0,21,XX(b)|0);l=a;return}function wX(){return}function xX(){return 0}function yX(){return 0}function zX(){return zY()|0}function AX(){return yY()|0}function BX(){return xY()|0}function CX(a){a=a|0;return wY(a)|0}function DX(a){a=a|0;if(a|0){qw(a);Q9(a)}return}function EX(a,b){a=a|0;b=b|0;kY(a,b);return}function FX(a){a=a|0;return a|0}function GX(a){a=a|0;return 2}function HX(a){a=a|0;return jY()|0}function IX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function JX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=iY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function KX(a,b){a=a|0;b=b|0;hY(a,b);return}function LX(a){a=a|0;return a|0}function MX(a){a=a|0;return 2}function NX(a){a=a|0;return gY()|0}function OX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function PX(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=fY(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function QX(a,b){a=a|0;b=b|0;bY(a,b);return}function RX(a){a=a|0;return a|0}function SX(a){a=a|0;return 3}function TX(a){a=a|0;return aY()|0}function UX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function VX(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=$X(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function WX(){return _X()|0}function XX(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function YX(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function ZX(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function _X(){return 912}function $X(a){a=a|0;return a|0}function aY(){return 3044}function bY(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;if(d|0){IG(d);Q9(d)}if(OF(b)|0)b=0;else{d=P9(4)|0;cY(d,b);b=d}c[a>>2]=b;return}function cY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;fN(e,b);b=dY()|0;c[a>>2]=pc(b|0,iN(e)|0)|0;l=d;return}function dY(){return eY()|0}function eY(){return 64}function fY(a){a=a|0;return a|0}function gY(){return 3056}function hY(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b)YF(a);else aH(a,b);return}function iY(a){a=a|0;return a|0}function jY(){return 3064}function kY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;j=d+28|0;h=d+24|0;g=d+20|0;k=d+16|0;e=d+12|0;f=d+8|0;i=d;c[j>>2]=0;c[h>>2]=-1;c[g>>2]=-1;c[k>>2]=-1;kz(b,j,h,g,k);lY(a);eH(e,36668);b=O(c[h>>2]<<2,c[g>>2]|0)|0;mY(i,b,c[j>>2]|0);nY(f,i);oY(a,e,f);IG(f);IG(e);eH(e,36675);QI(f,h);oY(a,e,f);IG(f);IG(e);eH(e,36681);QI(f,g);oY(a,e,f);IG(f);IG(e);l=d;return}function lY(a){a=a|0;fG(a,lc()|0);return}function mY(a,b,c){a=a|0;b=b|0;c=c|0;vY(a,b,c);return}function nY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;pY(e,b);b=qY()|0;c[a>>2]=pc(b|0,rY(e)|0)|0;l=d;return}function oY(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;aH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function pY(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;tY(f,b);uY(e,f);eG(e);l=d;return}function qY(){return sY()|0}function rY(a){a=a|0;return a|0}function sY(){return 400}function tY(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function uY(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function vY(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function wY(a){a=a|0;return 376}function xY(){return 384}function yY(){return 360}function zY(){return 376}function AY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;BY();d=CY()|0;g=DY()|0;n=EY()|0;m=FY()|0;k=GY()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,30,h|0,d|0,f|0,g|0,36719,oT()|0,72);c[b>>2]=KY(61)|0;g=EY()|0;f=LY(e)|0;e=MY(e)|0;d=EG()|0;Ub(g|0,36726,f|0,e|0,d|0,39,NY(b)|0,0);l=a;return}function BY(){return}function CY(){return 0}function DY(){return 0}function EY(){return WY()|0}function FY(){return VY()|0}function GY(){return UY()|0}function HY(a){a=a|0;return TY(a)|0}function IY(a){a=a|0;if(a|0){yw(a);Q9(a)}return}function JY(a,b){a=a|0;b=b|0;RY(a,b);return}function KY(a){a=a|0;return a|0}function LY(a){a=a|0;return 2}function MY(a){a=a|0;return QY()|0}function NY(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function OY(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=PY(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function PY(a){a=a|0;return a|0}function QY(){return 3072}function RY(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=SY(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function SY(a){a=a|0;a=c[a+64>>2]|0;return ((a|0)==0?36739:a+64|0)|0}function TY(a){a=a|0;return 200}function UY(){return 408}function VY(){return 184}function WY(){return 200}function XY(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;YY();f=ZY()|0;h=_Y()|0;n=$Y()|0;m=aZ()|0;k=bZ()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,31,g|0,f|0,d|0,h|0,36759,oT()|0,73);c[b>>2]=fZ(62)|0;h=$Y()|0;d=gZ(e)|0;f=hZ(e)|0;g=eL()|0;Ub(h|0,36770,d|0,f|0,g|0,22,iZ(b)|0,0);c[b>>2]=0;g=$Y()|0;f=EU()|0;d=EG()|0;h=kZ(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,36787,f|0,d|0,40,h|0,i|0,j|0,23,kZ(b)|0);c[b>>2]=8;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36793,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=12;g=$Y()|0;f=WX()|0;d=EG()|0;h=nZ(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,36807,f|0,d|0,41,h|0,i|0,j|0,24,nZ(b)|0);c[b>>2]=16;j=$Y()|0;i=WX()|0;h=EG()|0;d=nZ(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,36821,i|0,h|0,41,d|0,f|0,g|0,24,nZ(b)|0);c[b>>2]=rZ(63)|0;g=$Y()|0;f=sZ(e)|0;e=tZ(e)|0;d=eL()|0;Ub(g|0,36835,f|0,e|0,d|0,25,uZ(b)|0,0);l=a;return}function YY(){return}function ZY(){return 0}function _Y(){return 0}function $Y(){return QZ()|0}function aZ(){return PZ()|0}function bZ(){return OZ()|0}function cZ(a){a=a|0;return NZ(a)|0}function dZ(a){a=a|0;if(a|0)Q9(a);return}function eZ(a,b){a=a|0;b=b|0;BZ(a,b);return}function fZ(a){a=a|0;return a|0}function gZ(a){a=a|0;return 3}function hZ(a){a=a|0;return AZ()|0}function iZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function jZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=zZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function kZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function lZ(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function mZ(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function nZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function oZ(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function pZ(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function qZ(a,b){a=a|0;b=b|0;yZ(a,b);return}function rZ(a){a=a|0;return a|0}function sZ(a){a=a|0;return 3}function tZ(a){a=a|0;return xZ()|0}function uZ(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function vZ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=wZ(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function wZ(a){a=a|0;return a|0}function xZ(){return 3080}function yZ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,b);hw(a,d);l=c;return}function zZ(a){a=a|0;return a|0}function AZ(){return 3092}function BZ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=l;l=l+16|0;e=i+8|0;f=i;g=i+4|0;h=a+8|0;if((c[h>>2]|0)>0){d=a+4|0;a=0;do{c[e>>2]=c[(c[d>>2]|0)+(a<<2)>>2];CZ(g,e);DZ(f,b,g);IG(f);IG(g);a=a+1|0}while((a|0)<(c[h>>2]|0))}l=i;return}function CZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;HZ(e,b);b=IZ()|0;c[a>>2]=pc(b|0,JZ(e)|0)|0;l=d;return}function DZ(a,b,c){a=a|0;b=b|0;c=c|0;EZ(a,b,17,c);return}function EZ(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;FZ(i,e);h=c[b>>2]|0;g=oR(j)|0;b=pR(j)|0;e=GZ(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function FZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function GZ(a){a=a|0;return a|0}function HZ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;MZ(e,LZ(c[b>>2]|0)|0);eG(e);l=d;return}function IZ(){return KZ()|0}function JZ(a){a=a|0;return a|0}function KZ(){return 440}function LZ(a){a=a|0;return a|0}function MZ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function NZ(a){a=a|0;return 264}function OZ(){return 424}function PZ(){return 248}function QZ(){return 264}function RZ(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;SZ();d=TZ()|0;g=UZ()|0;n=VZ()|0;m=WZ()|0;k=XZ()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,32,h|0,d|0,f|0,g|0,36880,oT()|0,74);c[b>>2]=$Z(64)|0;g=VZ()|0;f=a_(e)|0;d=b_(e)|0;h=eL()|0;Ub(g|0,36891,f|0,d|0,h|0,26,c_(b)|0,0);h=f_(65)|0;d=VZ()|0;f=g_()|0;g=EG()|0;Vb(d|0,36907,f|0,g|0,42,h_(h)|0,0,0,0,0);h=f_(66)|0;g=VZ()|0;f=g_()|0;d=EG()|0;Vb(g|0,36917,f|0,d|0,42,h_(h)|0,0,0,0,0);c[b>>2]=l_(10)|0;h=VZ()|0;d=m_(e)|0;f=n_(e)|0;g=WR()|0;Ub(h|0,33188,d|0,f|0,g|0,5,o_(b)|0,0);c[b>>2]=75;c[b+4>>2]=0;g=VZ()|0;f=q_(e)|0;d=r_(e)|0;h=RJ()|0;Ub(g|0,36927,f|0,d|0,h|0,67,s_(b)|0,0);c[b>>2]=76;c[b+4>>2]=0;h=VZ()|0;d=q_(e)|0;f=r_(e)|0;g=RJ()|0;Ub(h|0,33201,d|0,f|0,g|0,67,s_(b)|0,0);c[b>>2]=v_(1)|0;g=VZ()|0;f=w_(e)|0;d=x_(e)|0;h=y_()|0;Ub(g|0,36950,f|0,d|0,h|0,1,z_(b)|0,0);c[b>>2]=C_(1)|0;h=VZ()|0;d=D_(e)|0;f=E_(e)|0;g=F_()|0;Ub(h|0,36958,d|0,f|0,g|0,1,G_(b)|0,0);c[b>>2]=J_(2)|0;g=VZ()|0;f=K_(e)|0;d=L_(e)|0;h=M_()|0;Ub(g|0,36966,f|0,d|0,h|0,1,N_(b)|0,0);c[b>>2]=Q_(2)|0;h=VZ()|0;d=R_(e)|0;f=S_(e)|0;g=T_()|0;Ub(h|0,36980,d|0,f|0,g|0,1,U_(b)|0,0);c[b>>2]=X_(1)|0;g=VZ()|0;f=Y_(e)|0;d=Z_(e)|0;h=__()|0;Ub(g|0,37004,f|0,d|0,h|0,1,$_(b)|0,0);c[b>>2]=c$(5)|0;h=VZ()|0;d=d$(e)|0;f=e$(e)|0;g=nP()|0;Ub(h|0,37012,d|0,f|0,g|0,3,f$(b)|0,0);c[b>>2]=i$(2)|0;g=VZ()|0;f=j$(e)|0;d=k$(e)|0;h=l$()|0;Ub(g|0,37026,f|0,d|0,h|0,2,m$(b)|0,0);c[b>>2]=p$(6)|0;h=VZ()|0;d=q$(e)|0;f=r$(e)|0;g=s$()|0;Ub(h|0,37038,d|0,f|0,g|0,6,t$(b)|0,0);c[b>>2]=w$(1)|0;g=VZ()|0;f=x$(e)|0;d=y$(e)|0;h=z$()|0;Ub(g|0,37056,f|0,d|0,h|0,1,A$(b)|0,0);c[b>>2]=D$(2)|0;h=VZ()|0;d=E$(e)|0;f=F$(e)|0;g=G$()|0;Ub(h|0,37066,d|0,f|0,g|0,1,H$(b)|0,0);c[b>>2]=K$(7)|0;g=VZ()|0;f=L$(e)|0;d=M$(e)|0;h=s$()|0;Ub(g|0,37082,f|0,d|0,h|0,7,N$(b)|0,0);c[b>>2]=Q$(1)|0;h=VZ()|0;d=R$(e)|0;f=S$(e)|0;g=T$()|0;Ub(h|0,37090,d|0,f|0,g|0,1,U$(b)|0,0);c[b>>2]=X$(1)|0;g=VZ()|0;f=Y$(e)|0;e=Z$(e)|0;d=_$()|0;Ub(g|0,37103,f|0,e|0,d|0,1,$$(b)|0,0);l=a;return}function SZ(){return}function TZ(){return 0}function UZ(){return 0}function VZ(){return u1()|0}function WZ(){return t1()|0}function XZ(){return s1()|0}function YZ(a){a=a|0;return r1(a)|0}function ZZ(a){a=a|0;if(a|0){Pr(a);Q9(a)}return}function _Z(a,b){a=a|0;b=b|0;d1(a,b);return}function $Z(a){a=a|0;return a|0}function a_(a){a=a|0;return 3}function b_(a){a=a|0;return c1()|0}function c_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function d_(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=b1(b)|0;YG(f,d);oe[a&127](b,f);IG(f);l=e;return}function e_(a,b){a=a|0;b=b|0;_0(a,b);return}function f_(a){a=a|0;return a|0}function g_(){return Z0()|0}function h_(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Y0(d)|0;l=b;return a|0}function i_(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function j_(a,b){a=a|0;b=b|0;M0(a,b);return}function k_(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L0(a,b,c,d);return}function l_(a){a=a|0;return a|0}function m_(a){a=a|0;return 5}function n_(a){a=a|0;return K0()|0}function o_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function p_(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=b0(b)|0;YG(h,d);YG(i,e);f=FH(f)|0;Ae[a&15](b,h,i,f);IG(i);IG(h);l=g;return}function q_(a){a=a|0;return 2}function r_(a){a=a|0;return J0()|0}function s_(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function t_(a,b){a=a|0;b=b|0;var d=0,e=0;e=I0(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function u_(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;H0(a,b,c,d,e);return}function v_(a){a=a|0;return a|0}function w_(a){a=a|0;return 6}function x_(a){a=a|0;return G0()|0}function y_(){return 37214}function z_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A_(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);f=GG(f)|0;g=+XG(g);Be[a&1](b,i,j,f,g);IG(j);IG(i);l=h;return}function B_(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;F0(a,b,c,d,e,f,g);return}function C_(a){a=a|0;return a|0}function D_(a){a=a|0;return 8}function E_(a){a=a|0;return E0()|0}function F_(){return 37204}function G_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function H_(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;h=h|0;i=+i;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;i=+XG(i);De[a&1](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function I_(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;D0(a,b,c,d,e,f);return}function J_(a){a=a|0;return a|0}function K_(a){a=a|0;return 7}function L_(a){a=a|0;return C0()|0}function M_(){return 37195}function N_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O_(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0;i=l;l=l+16|0;j=i+4|0;k=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);f=GG(f)|0;g=+XG(g);h=WG(h)|0;Ce[a&3](b,j,k,f,g,h);IG(k);IG(j);l=i;return}function P_(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;B0(a,b,c,d,e,f,g);return}function Q_(a){a=a|0;return a|0}function R_(a){a=a|0;return 8}function S_(a){a=a|0;return A0()|0}function T_(){return 37185}function U_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V_(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0;j=l;l=l+16|0;k=j+4|0;m=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);f=GG(f)|0;g=GG(g)|0;h=GG(h)|0;i=GG(i)|0;Le[a&3](b,k,m,f,g,h,i);IG(m);IG(k);l=j;return}function W_(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;z0(a,b,c,d,e,f,g);return}function X_(a){a=a|0;return a|0}function Y_(a){a=a|0;return 8}function Z_(a){a=a|0;return y0()|0}function __(){return 37175}function $_(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a$(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;var j=0,k=0,m=0,n=0,o=0;j=l;l=l+16|0;k=j+12|0;m=j+8|0;n=j+4|0;o=j;a=c[a>>2]|0;b=b0(b)|0;YG(k,d);YG(m,e);YG(n,f);YG(o,g);h=GG(h)|0;i=+XG(i);Je[a&3](b,k,m,n,o,h,i);IG(o);IG(n);IG(m);IG(k);l=j;return}function b$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x0(a,b,c,d,e,f);return}function c$(a){a=a|0;return a|0}function d$(a){a=a|0;return 7}function e$(a){a=a|0;return w0()|0}function f$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function g$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+16|0;j=i+12|0;k=i+8|0;m=i+4|0;n=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);YG(n,g);h=GG(h)|0;Ie[a&7](b,j,k,m,n,h);IG(n);IG(m);IG(k);IG(j);l=i;return}function h$(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;v0(a,b,c,d,e,f);return}function i$(a){a=a|0;return a|0}function j$(a){a=a|0;return 7}function k$(a){a=a|0;return u0()|0}function l$(){return 37166}function m$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function n$(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;var i=0,j=0,k=0,m=0;i=l;l=l+16|0;j=i+8|0;k=i+4|0;m=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);YG(k,e);YG(m,f);g=GG(g)|0;h=+XG(h);Fe[a&3](b,j,k,m,g,h);IG(m);IG(k);IG(j);l=i;return}function o$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;t0(a,b,c,d,e);return}function p$(a){a=a|0;return a|0}function q$(a){a=a|0;return 6}function r$(a){a=a|0;return s0()|0}function s$(){return 37158}function t$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function u$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);YG(j,e);YG(k,f);g=GG(g)|0;Ee[a&15](b,i,j,k,g);IG(k);IG(j);IG(i);l=h;return}function v$(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;r0(a,b,c,d,e,f);return}function w$(a){a=a|0;return a|0}function x$(a){a=a|0;return 7}function y$(a){a=a|0;return q0()|0}function z$(){return 37149}function A$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function B$(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;var i=0,j=0;i=l;l=l+16|0;j=i;a=c[a>>2]|0;b=b0(b)|0;YG(j,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;h=+XG(h);se[a&1](b,j,e,f,g,h);IG(j);l=i;return}function C$(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;p0(a,b,c,d,e);return}function D$(a){a=a|0;return a|0}function E$(a){a=a|0;return 6}function F$(a){a=a|0;return o0()|0}function G$(){return 37141}function H$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function I$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var h=0,i=0;h=l;l=l+16|0;i=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=+XG(e);f=GG(f)|0;g=WG(g)|0;re[a&3](b,i,e,f,g);IG(i);l=h;return}function J$(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;n0(a,b,c,d);return}function K$(a){a=a|0;return a|0}function L$(a){a=a|0;return 6}function M$(a){a=a|0;return m0()|0}function N$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function O$(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+4|0;k=h;a=c[a>>2]|0;b=b0(b)|0;YG(i,d);e=GG(e)|0;oG(j,f);YG(k,g);Ee[a&15](b,i,e,j,k);IG(k);T9(j);IG(i);l=h;return}function P$(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;f0(a,b,c,d,e,f,h,i);return}function Q$(a){a=a|0;return a|0}function R$(a){a=a|0;return 10}function S$(a){a=a|0;return e0()|0}function T$(){return 37129}function U$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function V$(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0;m=l;l=l+32|0;n=m+24|0;o=m+20|0;p=m+8|0;q=m+4|0;r=m;a=c[a>>2]|0;b=b0(b)|0;YG(n,d);e=+XG(e);YG(o,f);g=GG(g)|0;oG(p,h);YG(q,i);j=+XG(j);YG(r,k);te[a&1](b,n,e,o,g,p,q,j,r);IG(r);IG(q);T9(p);IG(o);IG(n);l=m;return}function W$(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;d0(a,b,c,d,e,f,g,h);return}function X$(a){a=a|0;return a|0}function Y$(a){a=a|0;return 9}function Z$(a){a=a|0;return c0()|0}function _$(){return 37118}function $$(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function a0(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0,o=0,p=0;k=l;l=l+16|0;m=k+12|0;n=k+8|0;o=k+4|0;p=k;a=c[a>>2]|0;b=b0(b)|0;YG(m,d);YG(n,e);YG(o,f);YG(p,g);h=GG(h)|0;i=+XG(i);j=WG(j)|0;Ke[a&1](b,m,n,o,p,h,i,j);IG(p);IG(o);IG(n);IG(m);l=k;return}function b0(a){a=a|0;return a|0}function c0(){return 3104}function d0(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;n=i+24|0;m=i+16|0;k=i+8|0;j=i;uH(n,b);uH(m,c);uH(k,d);uH(j,e);Yv(a,n,m,k,j,f,g,h);l=i;return}function e0(){return 3140}function f0(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;var k=0,m=0,n=0;n=l;l=l+48|0;k=n+16|0;m=n;a[k>>0]=a[n+32>>0]|0;d=g0(d,k)|0;cf(k);if(!(OF(j)|0)){IL(m,j);c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2]}uH(m,f);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;j=OF(j)|0;Zv(b,d,e,m,g,h,0,i,j?0:k);l=n;return}function g0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(h0(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=i0(f)|0;TF(e);l=d;return b|0}function h0(a){a=a|0;return l0()|0}function i0(a){a=+a;return k0(j0(a)|0)|0}function j0(a){a=+a;return ~~a>>>0|0}function k0(a){a=a|0;return a|0}function l0(){return 3180}function m0(){return 3184}function n0(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=l;l=l+16|0;g=h;uH(g,d);if((a[f+11>>0]|0)<0)f=c[f>>2]|0;dw(b,g,e,f,0);l=h;return}function o0(){return 3208}function p0(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;uH(g,b);Xv(a,g,c,d,e);l=f;return}function q0(){return 3232}function r0(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;var g=0,h=0;g=l;l=l+16|0;h=g;uH(h,b);Wv(a,h,c,d,e,f);l=g;return}function s0(){return 3260}function t0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;i=f+16|0;h=f+8|0;g=f;uH(i,b);uH(h,c);uH(g,d);Uv(a,i,h,g,e,1.0);l=f;return}function u0(){return 3284}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;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;j=g+16|0;i=g+8|0;h=g;uH(j,b);uH(i,c);uH(h,d);Uv(a,j,i,h,e,f);l=g;return}function w0(){return 3312}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;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+24|0;j=g+16|0;i=g+8|0;h=g;uH(k,b);uH(j,c);uH(i,d);uH(h,e);Tv(a,k,j,i,h,f);l=g;return}function y0(){return 3340}function z0(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;m=h+24|0;k=h+16|0;j=h+8|0;i=h;uH(m,b);uH(k,c);uH(j,d);uH(i,e);Sv(a,m,k,j,i,f,g);l=h;return}function A0(){return 3372}function B0(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;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Rv(a,j,i,d,e,f,g);l=h;return}function C0(){return 3404}function D0(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;i=g+8|0;h=g;uH(i,b);uH(h,c);Qv(a,i,h,d,e,f);l=g;return}function E0(){return 3432}function F0(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;var h=0,i=0,j=0;h=l;l=l+16|0;j=h+8|0;i=h;uH(j,b);uH(i,c);Pv(a,j,i,d,e,f,g);l=h;return}function G0(){return 3464}function H0(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;h=f+8|0;g=f;uH(h,b);uH(g,c);Ov(a,h,g,d,e);l=f;return}function I0(a){a=a|0;return a|0}function J0(){return 3488}function K0(){return 3496}function L0(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+24|0;h=f+16|0;j=f+8|0;i=f;uH(j,b);uH(i,d);c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];fv(a,h,g,e);l=f;return}function M0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+24|0;e=(N0(b)|0)*20|0;P0(d,e,O0(b)|0);Q0(a,d);l=c;return}function N0(a){a=a|0;return c[a>>2]|0}function O0(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function P0(a,b,c){a=a|0;b=b|0;c=c|0;X0(a,b,c);return}function Q0(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;R0(e,b);b=S0()|0;c[a>>2]=pc(b|0,T0(e)|0)|0;l=d;return}function R0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;c[e>>2]=a;V0(f,b);W0(e,f);eG(e);l=d;return}function S0(){return U0()|0}function T0(a){a=a|0;return a|0}function U0(){return 456}function V0(a,b){a=a|0;b=b|0;var d=0,e=0;e=b;d=c[e+4>>2]|0;b=a;c[b>>2]=c[e>>2];c[b+4>>2]=d;return}function W0(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=c[b>>2];c[(c[a>>2]|0)+4>>2]=c[b+4>>2];c[a>>2]=(c[a>>2]|0)+8;return}function X0(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;return}function Y0(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function Z0(){return 64}function _0(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;b=b+12|0;e=($0(b)|0)<<1;P0(d,e,a1(b)|0);Q0(a,d);l=c;return}function $0(a){a=a|0;return c[a>>2]|0}function a1(a){a=a|0;if((c[a>>2]|0)>0)return c[a+8>>2]|0;else Cb(37253,37262,1039,37276);return 0}function b1(a){a=a|0;return a|0}function c1(){return 3516}function d1(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;d=i+16|0;e=i+12|0;f=i+4|0;g=i+8|0;h=i;c[d>>2]=0;j=e1(a)|0;c[e>>2]=j;if((j|0)!=(f1(a)|0))do{g1(g,e);XO(h,d);h1(f,b,g,h);IG(f);IG(h);IG(g);j=c[e>>2]|0;c[d>>2]=(c[d>>2]|0)+(c[j>>2]|0);j=j+32|0;c[e>>2]=j}while((j|0)!=(f1(a)|0));l=i;return}function e1(a){a=a|0;return c[a+8>>2]|0}function f1(a){a=a|0;return (c[a+8>>2]|0)+(c[a>>2]<<5)|0}function g1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;l1(e,b);b=m1()|0;c[a>>2]=pc(b|0,n1(e)|0)|0;l=d;return}function h1(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;i1(a,b,17,c,d);return}function i1(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;g=l;l=l+32|0;j=g+16|0;i=g;j1(i,e,f);h=c[b>>2]|0;b=IS(j)|0;e=JS(j)|0;f=k1(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function j1(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function k1(a){a=a|0;return a|0}function l1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;q1(e,p1(c[b>>2]|0)|0);eG(e);l=d;return}function m1(){return o1()|0}function n1(a){a=a|0;return a|0}function o1(){return 464}function p1(a){a=a|0;return a|0}function q1(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function r1(a){a=a|0;return 128}function s1(){return 440}function t1(){return 112}function u1(){return 128}function v1(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;w1();h=x1()|0;j=y1()|0;n=z1()|0;m=A1()|0;k=B1()|0;g=eU()|0;d=rG()|0;f=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,d|0,33,f|0,h|0,i|0,j|0,37306,oT()|0,77);c[b>>2]=0;j=z1()|0;i=E1()|0;h=EG()|0;f=F1(b)|0;d=E1()|0;g=eL()|0;Vb(j|0,37316,i|0,h|0,43,f|0,d|0,g|0,27,F1(b)|0);c[b>>2]=J1(68)|0;g=z1()|0;d=K1(e)|0;e=L1(e)|0;f=EG()|0;Ub(g|0,37326,d|0,e|0,f|0,44,M1(b)|0,0);b=P1(69)|0;f=z1()|0;e=g_()|0;d=EG()|0;Vb(f|0,37338,e|0,d|0,45,Q1(b)|0,0,0,0,0);l=a;return}function w1(){return}function x1(){return 0}function y1(){return 0}function z1(){return $1()|0}function A1(){return _1()|0}function B1(){return Z1()|0}function C1(a){a=a|0;return Y1(a)|0}function D1(a){a=a|0;if(a|0)Q9(a);return}function E1(){return X1()|0}function F1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function G1(a,b){a=a|0;b=b|0;return xI(b+(c[a>>2]|0)|0)|0}function H1(a,b,d){a=a|0;b=b|0;d=d|0;d=GG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function I1(a,b){a=a|0;b=b|0;W1(a,b);return}function J1(a){a=a|0;return a|0}function K1(a){a=a|0;return 2}function L1(a){a=a|0;return V1()|0}function M1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function N1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=U1(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function O1(a,b){a=a|0;b=b|0;T1(a,b);return}function P1(a){a=a|0;return a|0}function Q1(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=S1(d)|0;l=b;return a|0}function R1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;oe[c[a>>2]&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function S1(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function T1(a,b){a=a|0;b=b|0;b=c[b+20>>2]|0;if(!b)YF(a);else aH(a,b);return}function U1(a){a=a|0;return a|0}function V1(){return 3528}function W1(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;XQ(a,e);l=d;return}function X1(){return 920}function Y1(a){a=a|0;return 480}function Z1(){return 464}function _1(){return 488}function $1(){return 480}function a2(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;b2();g=c2()|0;d=d2()|0;n=e2()|0;m=f2()|0;k=g2()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,34,h|0,g|0,f|0,d|0,37360,oT()|0,78);d=e2()|0;f=j2(b)|0;g=k2(b)|0;Tb(d|0,f|0,g|0,rG()|0,35,17);g=e2()|0;f=n2(b)|0;d=o2(b)|0;Tb(g|0,f|0,d|0,EG()|0,46,36);d=e2()|0;f=r2(b)|0;g=s2(b)|0;Tb(d|0,f|0,g|0,KH()|0,2,47);c[b>>2]=0;g=e2()|0;f=lU()|0;d=iQ()|0;h=v2(b)|0;i=lU()|0;j=dQ()|0;Vb(g|0,37377,f|0,d|0,8,h|0,i|0,j|0,5,v2(b)|0);c[b>>2]=4;j=e2()|0;i=lU()|0;h=iQ()|0;d=v2(b)|0;f=lU()|0;g=dQ()|0;Vb(j|0,37387,i|0,h|0,8,d|0,f|0,g|0,5,v2(b)|0);c[b>>2]=8;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37399,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=12;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37410,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=16;g=e2()|0;f=WX()|0;d=EG()|0;h=y2(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37417,f|0,d|0,48,h|0,i|0,j|0,28,y2(b)|0);c[b>>2]=20;j=e2()|0;i=WX()|0;h=EG()|0;d=y2(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37430,i|0,h|0,48,d|0,f|0,g|0,28,y2(b)|0);c[b>>2]=37;c[b+4>>2]=0;g=e2()|0;f=B2(e)|0;d=C2(e)|0;h=EG()|0;Ub(g|0,37441,f|0,d|0,h|0,49,D2(b)|0,0);c[b>>2]=6;c[b+4>>2]=0;h=e2()|0;d=F2(e)|0;f=G2(e)|0;g=H2()|0;Ub(h|0,30345,d|0,f|0,g|0,1,I2(b)|0,0);c[b>>2]=79;c[b+4>>2]=0;g=e2()|0;f=K2(e)|0;e=L2(e)|0;d=RJ()|0;Ub(g|0,30351,f|0,e|0,d|0,70,M2(b)|0,0);l=a;return}function b2(){return}function c2(){return 0}function d2(){return 0}function e2(){return $2()|0}function f2(){return _2()|0}function g2(){return Z2()|0}function h2(a){a=a|0;return Y2(a)|0}function i2(a){a=a|0;if(a|0){eq(a);Q9(a)}return}function j2(a){a=a|0;return 1}function k2(a){a=a|0;return X2()|0}function l2(a){a=a|0;return U2(Bd[a&31]()|0)|0}function m2(){var a=0;a=P9(24)|0;dq(a,-1,-1.0);return a|0}function n2(a){a=a|0;return 2}function o2(a){a=a|0;return W2()|0}function p2(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=S2(b)|0;b=U2(Cd[a&63](e)|0)|0;l=d;return b|0}function q2(a){a=a|0;var b=0;b=P9(24)|0;dq(b,c[a>>2]|0,-1.0);return b|0}function r2(a){a=a|0;return 3}function s2(a){a=a|0;return V2()|0}function t2(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;e=l;l=l+16|0;h=e+4|0;f=e;c[h>>2]=S2(b)|0;g[f>>2]=+T2(d);b=U2(Gd[a&63](h,f)|0)|0;l=e;return b|0}function u2(a,b){a=a|0;b=b|0;var d=0;d=P9(24)|0;dq(d,c[a>>2]|0,+g[b>>2]);return d|0}function v2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function w2(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function x2(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function y2(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function z2(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function A2(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function B2(a){a=a|0;return 2}function C2(a){a=a|0;return R2()|0}function D2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function E2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function F2(a){a=a|0;return 4}function G2(a){a=a|0;return Q2()|0}function H2(){return 37485}function I2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function J2(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,g=0;g=O2(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;g=WG(d)|0;e=+XG(e);pe[b&15](a,g,e);return}function K2(a){a=a|0;return 2}function L2(a){a=a|0;return P2()|0}function M2(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function N2(a,b){a=a|0;b=b|0;var d=0,e=0;e=O2(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;je[b&127](a);return}function O2(a){a=a|0;return a|0}function P2(){return 3536}function Q2(){return 3544}function R2(){return 3560}function S2(a){a=a|0;return WG(a)|0}function T2(a){a=+a;return +(+XG(a))}function U2(a){a=a|0;return a|0}function V2(){return 3568}function W2(){return 3580}function X2(){return 3588}function Y2(a){a=a|0;return 520}function Z2(){return 528}function _2(){return 504}function $2(){return 520}function a3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;b3();g=c3()|0;d=d3()|0;n=e3()|0;m=f3()|0;k=g3()|0;j=eU()|0;i=rG()|0;h=fU()|0;f=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,38,h|0,g|0,f|0,d|0,37512,oT()|0,80);d=e3()|0;f=j3(b)|0;g=k3(b)|0;Tb(d|0,f|0,g|0,rG()|0,39,18);c[b>>2]=o3(71)|0;g=e3()|0;f=p3(e)|0;d=q3(e)|0;h=EG()|0;Ub(g|0,37544,f|0,d|0,h|0,50,r3(b)|0,0);c[b>>2]=o3(72)|0;h=e3()|0;d=p3(e)|0;f=q3(e)|0;g=EG()|0;Ub(h|0,37551,d|0,f|0,g|0,50,r3(b)|0,0);c[b>>2]=o3(73)|0;g=e3()|0;f=p3(e)|0;e=q3(e)|0;d=EG()|0;Ub(g|0,37566,f|0,e|0,d|0,50,r3(b)|0,0);l=a;return}function b3(){return}function c3(){return 0}function d3(){return 0}function e3(){return L3()|0}function f3(){return K3()|0}function g3(){return J3()|0}function h3(a){a=a|0;return I3(a)|0}function i3(a){a=a|0;if(a|0)Q9(a);return}function j3(a){a=a|0;return 1}function k3(a){a=a|0;return H3()|0}function l3(a){a=a|0;return gS(Bd[a&31]()|0)|0}function m3(){var a=0;a=P9(28)|0;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;Vs(a);return a|0}function n3(a,b){a=a|0;b=b|0;G3(a,b);return}function o3(a){a=a|0;return a|0}function p3(a){a=a|0;return 2}function q3(a){a=a|0;return F3()|0}function r3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=E3(b)|0;oe[a&127](e,b);b=HG(e)|0;IG(e);l=d;return b|0}function t3(a,b){a=a|0;b=b|0;D3(a,b);return}function u3(a,b){a=a|0;b=b|0;v3(a,b);return}function v3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+20;w3(a,e);l=d;return}function w3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;x3(e,b);b=y3()|0;c[a>>2]=pc(b|0,z3(e)|0)|0;l=d;return}function x3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;C3(e,B3(c[b>>2]|0)|0);eG(e);l=d;return}function y3(){return A3()|0}function z3(a){a=a|0;return a|0}function A3(){return 544}function B3(a){a=a|0;return a|0}function C3(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function D3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+12;w3(a,e);l=d;return}function E3(a){a=a|0;return a|0}function F3(){return 3592}function G3(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b+4;w3(a,e);l=d;return}function H3(){return 3600}function I3(a){a=a|0;return 240}function J3(){return 560}function K3(){return 224}function L3(){return 240}function M3(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+8|0;N3();j=O3()|0;h=P3()|0;n=Q3()|0;m=R3()|0;k=S3()|0;g=eU()|0;f=rG()|0;d=fU()|0;i=fU()|0;Sb(n|0,m|0,k|0,g|0,f|0,40,d|0,j|0,i|0,h|0,37627,oT()|0,81);h=Q3()|0;i=V3(b)|0;j=W3(b)|0;Tb(h|0,i|0,j|0,rG()|0,41,19);c[b>>2]=0;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37653,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=4;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37663,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=12;j=Q3()|0;i=EU()|0;h=EG()|0;d=a4(b)|0;f=EU()|0;g=eL()|0;Vb(j|0,37669,i|0,h|0,52,d|0,f|0,g|0,30,a4(b)|0);c[b>>2]=14;g=Q3()|0;f=d4()|0;d=EG()|0;h=e4(b)|0;i=d4()|0;j=eL()|0;Vb(g|0,37678,f|0,d|0,53,h|0,i|0,j|0,31,e4(b)|0);c[b>>2]=16;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37688,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=i4(74)|0;g=Q3()|0;f=j4(e)|0;d=k4(e)|0;h=EG()|0;Ub(g|0,37697,f|0,d|0,h|0,54,l4(b)|0,0);c[b>>2]=o4(75)|0;h=Q3()|0;d=p4(e)|0;f=q4(e)|0;g=eL()|0;Ub(h|0,37704,d|0,f|0,g|0,32,r4(b)|0,0);c[b>>2]=24;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37711,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=28;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37722,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=32;g=Q3()|0;f=EU()|0;d=EG()|0;h=a4(b)|0;i=EU()|0;j=eL()|0;Vb(g|0,37730,f|0,d|0,52,h|0,i|0,j|0,30,a4(b)|0);c[b>>2]=36;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37739,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=40;g=Q3()|0;f=WX()|0;d=EG()|0;h=Z3(b)|0;i=WX()|0;j=eL()|0;Vb(g|0,37749,f|0,d|0,51,h|0,i|0,j|0,29,Z3(b)|0);c[b>>2]=44;j=Q3()|0;i=WX()|0;h=EG()|0;d=Z3(b)|0;f=WX()|0;g=eL()|0;Vb(j|0,37764,i|0,h|0,51,d|0,f|0,g|0,29,Z3(b)|0);c[b>>2]=33;c[b+4>>2]=0;g=Q3()|0;f=t4(e)|0;d=u4(e)|0;h=YJ()|0;Ub(g|0,37777,f|0,d|0,h|0,11,v4(b)|0,0);c[b>>2]=y4(12)|0;h=Q3()|0;d=z4(e)|0;f=A4(e)|0;g=WR()|0;Ub(h|0,37789,d|0,f|0,g|0,8,B4(b)|0,0);c[b>>2]=42;c[b+4>>2]=0;g=Q3()|0;f=E4(e)|0;e=F4(e)|0;d=EG()|0;Ub(g|0,37801,f|0,e|0,d|0,55,G4(b)|0,0);l=a;return}function N3(){return}function O3(){return 0}function P3(){return 0}function Q3(){return Z4()|0}function R3(){return Y4()|0}function S3(){return X4()|0}function T3(a){a=a|0;return W4(a)|0}function U3(a){a=a|0;if(a|0)Q9(a);return}function V3(a){a=a|0;return 1}function W3(a){a=a|0;return V4()|0}function X3(a){a=a|0;return pN(Bd[a&31]()|0)|0}function Y3(){var a=0,b=0,d=0;a=P9(48)|0;b=a;d=b+48|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));return a|0}function Z3(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function _3(a,b){a=a|0;b=b|0;return RH(b+(c[a>>2]|0)|0)|0}function $3(a,b,d){a=a|0;b=b|0;d=d|0;d=WG(d)|0;c[b+(c[a>>2]|0)>>2]=d;return}function a4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function b4(b,d){b=b|0;d=d|0;return rH((a[d+(c[b>>2]|0)>>0]|0)!=0)|0}function c4(b,d,e){b=b|0;d=d|0;e=e|0;e=FH(e)|0;a[d+(c[b>>2]|0)>>0]=e&1;return}function d4(){return U4()|0}function e4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function f4(a,b){a=a|0;b=b|0;return T4(b+(c[a>>2]|0)|0)|0}function g4(a,d,e){a=a|0;d=d|0;e=e|0;e=VW(e)|0;b[d+(c[a>>2]|0)>>1]=e;return}function h4(a,b){a=a|0;b=b|0;S4(a,b);return}function i4(a){a=a|0;return a|0}function j4(a){a=a|0;return 2}function k4(a){a=a|0;return R4()|0}function l4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function m4(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;a=c[a>>2]|0;b=K4(b)|0;oe[a&127](e,b);b=tG(e)|0;T9(e);l=d;return b|0}function n4(a,b){a=a|0;b=b|0;Q4(a,b);return}function o4(a){a=a|0;return a|0}function p4(a){a=a|0;return 3}function q4(a){a=a|0;return P4()|0}function r4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function s4(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;b=K4(b)|0;oG(f,d);oe[a&127](b,f);T9(f);l=e;return}function t4(a){a=a|0;return 4}function u4(a){a=a|0;return O4()|0}function v4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function w4(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=N4(b)|0;b=c[a>>2]|0;f=c[a+4>>2]|0;a=g+(f>>1)|0;if(f&1)b=c[(c[a>>2]|0)+b>>2]|0;f=WG(d)|0;g=WG(e)|0;ue[b&63](a,f,g);return}function x4(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;M4(a,b,c);return}function y4(a){a=a|0;return a|0}function z4(a){a=a|0;return 5}function A4(a){a=a|0;return L4()|0}function B4(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function C4(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;a=c[a>>2]|0;b=K4(b)|0;d=WG(d)|0;oG(h,e);YG(i,f);Ae[a&15](b,d,h,i);IG(i);T9(h);l=g;return}function D4(a){a=a|0;return (c[a+40>>2]|0)!=(c[a+44>>2]|0)|0}function E4(a){a=a|0;return 2}function F4(a){a=a|0;return J4()|0}function G4(a){a=a|0;var b=0,d=0;b=P9(8)|0;d=c[a+4>>2]|0;c[b>>2]=c[a>>2];c[b+4>>2]=d;return b|0}function H4(a,b){a=a|0;b=b|0;var d=0,e=0;e=I4(b)|0;b=c[a>>2]|0;d=c[a+4>>2]|0;a=e+(d>>1)|0;if(d&1)b=c[(c[a>>2]|0)+b>>2]|0;return rH(Cd[b&63](a)|0)|0}function I4(a){a=a|0;return a|0}function J4(){return 3604}function K4(a){a=a|0;return a|0}function L4(){return 3612}function M4(b,d,e){b=b|0;d=d|0;e=e|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;lp(b,d,e,0);return}function N4(a){a=a|0;return a|0}function O4(){return 3632}function P4(){return 3648}function Q4(b,d){b=b|0;d=d|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;a8(c[b+20>>2]|0,d)|0;return}function R4(){return 3660}function S4(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=c[d+20>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function T4(a){a=a|0;return b[a>>1]|0}function U4(){return 904}function V4(){return 3668}function W4(a){a=a|0;return 176}function X4(){return 576}function Y4(){return 160}function Z4(){return 176}function _4(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;$4();f=a5()|0;h=b5()|0;n=c5()|0;m=d5()|0;k=e5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,43,g|0,f|0,d|0,h|0,37844,oT()|0,82);h=c5()|0;d=h5(b)|0;f=i5(b)|0;Tb(h|0,d|0,f|0,rG()|0,44,20);f=c5()|0;d=l5(b)|0;h=m5(b)|0;Tb(f|0,d|0,h|0,n5()|0,1,21);c[b>>2]=0;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=4;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=8;h=c5()|0;d=lU()|0;f=iQ()|0;g=q5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34475,d|0,f|0,9,g|0,i|0,j|0,7,q5(b)|0);c[b>>2]=12;j=c5()|0;i=lU()|0;g=iQ()|0;f=q5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34477,i|0,g|0,9,f|0,d|0,h|0,7,q5(b)|0);c[b>>2]=34;h=c5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=56;g=c5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function $4(){return}function a5(){return 0}function b5(){return 0}function c5(){return H5()|0}function d5(){return G5()|0}function e5(){return F5()|0}function f5(a){a=a|0;return E5(a)|0}function g5(a){a=a|0;if(a|0)Q9(a);return}function h5(a){a=a|0;return 1}function i5(a){a=a|0;return D5()|0}function j5(a){a=a|0;return gV(Bd[a&31]()|0)|0}function k5(){var a=0;a=P9(16)|0;cf(a);return a|0}function l5(a){a=a|0;return 5}function m5(a){a=a|0;return C5()|0}function n5(){return 37863}function o5(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;k=f+12|0;j=f+8|0;i=f+4|0;h=f;g[k>>2]=+T2(b);g[j>>2]=+T2(c);g[i>>2]=+T2(d);g[h>>2]=+T2(e);a=gV(Xd[a&31](k,j,i,h)|0)|0;l=f;return a|0}function p5(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=P9(16)|0;Of(e,+g[a>>2],+g[b>>2],+g[c>>2],+g[d>>2]);return e|0}function q5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function r5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function s5(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function t5(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);vH(e,c,34475);g[f>>2]=+wH(e);cH(b,34475,f);IG(e);vH(e,c,34477);g[f>>2]=+wH(e);cH(b,34477,f);IG(e);cY(a,b);l=d;return}function u5(a){a=a|0;return 3}function v5(a){a=a|0;return B5()|0}function w5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function x5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);ue[a&63](h,f,g);d=HG(h)|0;IG(h);IG(g);IG(f);l=e;return d|0}function y5(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if((!f?(vH(c,a,34434),g=+wH(c),vH(d,b,34434),f=g!=+wH(d),IG(d),IG(c),!f):0)?(vH(c,a,34475),g=+wH(c),vH(d,b,34475),f=g!=+wH(d),IG(d),IG(c),!f):0){vH(c,a,34477);g=+wH(c);vH(d,b,34477);a=g==+wH(d);IG(d);IG(c)}else a=0;l=e;return a|0}function z5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function A5(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;YG(f,b);YG(g,d);d=rH(Gd[a&63](f,g)|0)|0;IG(g);IG(f);l=e;return d|0}function B5(){return 3672}function C5(){return 3684}function D5(){return 3704}function E5(a){a=a|0;return 72}function F5(){return 208}function G5(){return 296}function H5(){return 72}function I5(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;a=l;l=l+16|0;b=a;e=a+4|0;J5();f=K5()|0;h=L5()|0;n=M5()|0;m=N5()|0;k=O5()|0;j=eU()|0;i=rG()|0;g=fU()|0;d=fU()|0;Sb(n|0,m|0,k|0,j|0,i|0,45,g|0,f|0,d|0,h|0,37870,oT()|0,83);h=M5()|0;d=R5(b)|0;f=S5(b)|0;Tb(h|0,d|0,f|0,rG()|0,46,21);f=M5()|0;d=V5(b)|0;h=W5(b)|0;Tb(f|0,d|0,h|0,X5()|0,2,57);c[b>>2]=0;h=M5()|0;d=lU()|0;f=iQ()|0;g=_5(b)|0;i=lU()|0;j=dQ()|0;Vb(h|0,34432,d|0,f|0,10,g|0,i|0,j|0,8,_5(b)|0);c[b>>2]=4;j=M5()|0;i=lU()|0;g=iQ()|0;f=_5(b)|0;d=lU()|0;h=dQ()|0;Vb(j|0,34434,i|0,g|0,10,f|0,d|0,h|0,8,_5(b)|0);c[b>>2]=35;h=M5()|0;d=u5(e)|0;f=v5(e)|0;g=VH()|0;Ub(h|0,37851,d|0,f|0,g|0,43,w5(b)|0,0);c[b>>2]=58;g=M5()|0;f=AJ(e)|0;e=BJ(e)|0;d=VH()|0;Ub(g|0,37856,f|0,e|0,d|0,44,z5(b)|0,0);l=a;return}function J5(){return}function K5(){return 0}function L5(){return 0}function M5(){return i6()|0}function N5(){return h6()|0}function O5(){return g6()|0}function P5(a){a=a|0;return f6(a)|0}function Q5(a){a=a|0;if(a|0)Q9(a);return}function R5(a){a=a|0;return 1}function S5(a){a=a|0;return e6()|0}function T5(a){a=a|0;return pV(Bd[a&31]()|0)|0}function U5(){var a=0;a=P9(8)|0;bf(a);return a|0}function V5(a){a=a|0;return 3}function W5(a){a=a|0;return d6()|0}function X5(){return 37877}function Y5(a,b,c){a=a|0;b=+b;c=+c;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;g[f>>2]=+T2(b);g[e>>2]=+T2(c);a=pV(Gd[a&63](f,e)|0)|0;l=d;return a|0}function Z5(a,b){a=a|0;b=b|0;var c=0;c=P9(8)|0;df(c,+g[a>>2],+g[b>>2]);return c|0}function _5(a){a=a|0;var b=0;b=P9(4)|0;c[b>>2]=c[a>>2];return b|0}function $5(a,b){a=a|0;b=b|0;return +(+kH(b+(c[a>>2]|0)|0))}function a6(a,b,d){a=a|0;b=b|0;d=+d;d=+XG(d);g[b+(c[a>>2]|0)>>2]=d;return}function b6(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;vH(e,c,34432);g[f>>2]=+wH(e);cH(b,34432,f);IG(e);vH(e,c,34434);g[f>>2]=+wH(e);cH(b,34434,f);IG(e);cY(a,b);l=d;return}function c6(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0.0;e=l;l=l+16|0;c=e+4|0;d=e;vH(c,a,34432);g=+wH(c);vH(d,b,34432);f=g!=+wH(d);IG(d);IG(c);if(f)a=0;else{vH(c,a,34434);g=+wH(c);vH(d,b,34434);a=g==+wH(d);IG(d);IG(c)}l=e;return a|0}function d6(){return 3708}function e6(){return 3720}function f6(a){a=a|0;return 80}function g6(){return 544}function h6(){return 312}function i6(){return 80}function j6(a){a=a|0;$A(37882,84);return}function k6(a){a=a|0;var b=0,c=0,d=0;b=l;l=l+48|0;d=b+8|0;c=b;I7(d);lY(a);dI(c,d);l6(a,37891,c);IG(c);dI(c,d+4|0);m6(a,37897,c);IG(c);dI(c,d+8|0);n6(a,37905,c);IG(c);dI(c,d+12|0);l6(a,37912,c);IG(c);dI(c,d+16|0);n6(a,37918,c);IG(c);dI(c,d+20|0);m6(a,37925,c);IG(c);dI(c,d+24|0);m6(a,37933,c);IG(c);dI(c,d+28|0);cN(a,37941,c);IG(c);dI(c,d+32|0);cN(a,37950,c);IG(c);dI(c,d+36|0);cN(a,37959,c);IG(c);l=b;return}function l6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function m6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function n6(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function o6(){p6();return}function p6(){q6(0);return}function q6(a){a=a|0;cc(r6()|0,37968);Rb(EU()|0,37973,1,1,0);s6();t6();u6();v6();w6();x6();y6();z6();A6();B6();C6();ac(D6()|0,37978);ac(E6()|0,37990);bc(F6()|0,4,38023);Xb(g_()|0,38036);G6();H6(38052);I6(38089);J6(38128);K6(38159);L6(38199);M6(38228);N6();O6();H6(38266);I6(38298);J6(38331);K6(38364);L6(38398);M6(38431);P6();Q6();R6();return}function r6(){return B7()|0}function s6(){_b(z7()|0,39196,1,-128,127);return}function t6(){_b(x7()|0,39184,1,-128,127);return}function u6(){_b(v7()|0,39170,1,0,255);return}function v6(){_b(t7()|0,39164,2,-32768,32767);return}function w6(){_b(d4()|0,39149,2,0,65535);return}function x6(){_b(WX()|0,39145,4,-2147483648,2147483647);return}function y6(){_b(E1()|0,39132,4,0,-1);return}function z6(){_b(r7()|0,39127,4,-2147483648,2147483647);return}function A6(){_b(p7()|0,39113,4,0,-1);return}function B6(){Yb(lU()|0,39107,4);return}function C6(){Yb(n7()|0,39100,8);return}function D6(){return m7()|0}function E6(){return l7()|0}function F6(){return k7()|0}function G6(){$b(S0()|0,0,38944);return}function H6(a){a=a|0;$b(i7()|0,0,a|0);return}function I6(a){a=a|0;$b(qY()|0,1,a|0);return}function J6(a){a=a|0;$b(g7()|0,2,a|0);return}function K6(a){a=a|0;$b(e7()|0,3,a|0);return}function L6(a){a=a|0;$b(c7()|0,4,a|0);return}function M6(a){a=a|0;$b(a7()|0,5,a|0);return}function N6(){$b(_6()|0,4,38728);return}function O6(){$b(Y6()|0,5,38658);return}function P6(){$b(W6()|0,6,38596);return}function Q6(){$b(U6()|0,7,38533);return}function R6(){$b(S6()|0,7,38465);return}function S6(){return T6()|0}function T6(){return 592}function U6(){return V6()|0}function V6(){return 600}function W6(){return X6()|0}function X6(){return 608}function Y6(){return Z6()|0}function Z6(){return 616}function _6(){return $6()|0}function $6(){return 624}function a7(){return b7()|0}function b7(){return 632}function c7(){return d7()|0}function d7(){return 640}function e7(){return f7()|0}function f7(){return 648}function g7(){return h7()|0}function h7(){return 656}function i7(){return j7()|0}function j7(){return 664}function k7(){return 672}function l7(){return 696}function m7(){return 32}function n7(){return o7()|0}function o7(){return 952}function p7(){return q7()|0}function q7(){return 936}function r7(){return s7()|0}function s7(){return 928}function t7(){return u7()|0}function u7(){return 896}function v7(){return w7()|0}function w7(){return 880}function x7(){return y7()|0}function y7(){return 888}function z7(){return A7()|0}function A7(){return 872}function B7(){return 832}function C7(a){a=a|0;return t9(c[a+4>>2]|0)|0}function D7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+16|0;p=x;do if(a>>>0<245){m=a>>>0<11?16:a+11&-8;a=m>>>3;o=c[14504]|0;d=o>>>a;if(d&3|0){b=(d&1^1)+a|0;a=58056+(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[14504]=o&~(1<>2]=a;c[d>>2]=g}w=b<<3;c[e+4>>2]=w|3;w=e+w+4|0;c[w>>2]=c[w>>2]|1;w=f;l=x;return w|0}n=c[14506]|0;if(m>>>0>n>>>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=58056+(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=o&~(1<>2]=b;c[a>>2]=d;a=o}w=e<<3;h=w-m|0;c[g+4>>2]=m|3;f=g+m|0;c[f+4>>2]=h|1;c[g+w>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=f;w=i;l=x;return w|0}j=c[14505]|0;if(j){d=(j&0-j)+-1|0;i=d>>>12&16;d=d>>>i;h=d>>>5&8;d=d>>>h;k=d>>>2&4;d=d>>>k;e=d>>>1&2;d=d>>>e;a=d>>>1&1;a=c[58320+((h|i|k|e|a)+(d>>>a)<<2)>>2]|0;d=(c[a+4>>2]&-8)-m|0;e=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){k=a;h=d}else{do{i=(c[e+4>>2]&-8)-m|0;k=i>>>0>>0;d=k?i:d;a=k?e:a;e=c[e+16+(((c[e+16>>2]|0)==0&1)<<2)>>2]|0}while((e|0)!=0);k=a;h=d}i=k+m|0;if(i>>>0>k>>>0){f=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0;d=b}else{d=c[k+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[k+28>>2]|0;a=58320+(b<<2)|0;if((k|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14505]=j&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[k+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[k+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(h>>>0<16){w=h+m|0;c[k+4>>2]=w|3;w=k+w+4|0;c[w>>2]=c[w>>2]|1}else{c[k+4>>2]=m|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(n|0){e=c[14509]|0;b=n>>>3;d=58056+(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[14506]=h;c[14509]=i}w=k+8|0;l=x;return w|0}else n=m}else n=m}else n=m}else if(a>>>0<=4294967231){a=a+11|0;m=a&-8;k=c[14505]|0;if(k){e=0-m|0;a=a>>>8;if(a)if(m>>>0>16777215)j=31;else{o=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;j=14-(n|o|j)+(v<>>15)|0;j=m>>>(j+7|0)&1|j<<1}else j=0;d=c[58320+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;v=57}else{a=0;i=d;h=m<<((j|0)==31?0:25-(j>>>1)|0);d=0;while(1){f=(c[i+4>>2]&-8)-m|0;if(f>>>0>>0)if(!f){e=0;d=i;a=i;v=61;break a}else{a=i;e=f}f=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;d=(f|0)==0|(f|0)==(i|0)?d:f;f=(i|0)==0;if(f){v=57;break}else h=h<<((f^1)&1)}}while(0);if((v|0)==57){if((d|0)==0&(a|0)==0){a=2<>>12&16;o=o>>>i;h=o>>>5&8;o=o>>>h;j=o>>>2&4;o=o>>>j;n=o>>>1&2;o=o>>>n;d=o>>>1&1;a=0;d=c[58320+((h|i|j|n|d)+(o>>>d)<<2)>>2]|0}if(!d){i=a;h=e}else v=61}if((v|0)==61)while(1){v=0;n=(c[d+4>>2]&-8)-m|0;o=n>>>0>>0;e=o?n:e;a=o?d:a;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){i=a;h=e;break}else v=61}if((i|0)!=0?h>>>0<((c[14506]|0)-m|0)>>>0:0){g=i+m|0;if(g>>>0<=i>>>0){w=0;l=x;return w|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){b=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}c[a>>2]=0}else{w=c[i+8>>2]|0;c[w+12>>2]=b;c[b+8>>2]=w}while(0);do if(f){a=c[i+28>>2]|0;d=58320+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=k&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){e=k;break}}c[b+24>>2]=f;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;e=k}else e=k}else e=k;while(0);do if(h>>>0>=16){c[i+4>>2]=m|3;c[g+4>>2]=h|1;c[g+h>>2]=h;b=h>>>3;if(h>>>0<256){d=58056+(b<<1<<2)|0;a=c[14504]|0;b=1<>2]|0}c[a>>2]=g;c[b+12>>2]=g;c[g+8>>2]=b;c[g+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;d=58320+(b<<2)|0;c[g+28>>2]=b;a=g+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(h|0)){v=97;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=96;break}else{a=a<<1;d=b}}if((v|0)==96){c[e>>2]=g;c[g+24>>2]=d;c[g+12>>2]=g;c[g+8>>2]=g;break}else if((v|0)==97){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=g;c[v>>2]=g;c[g+8>>2]=w;c[g+12>>2]=d;c[g+24>>2]=0;break}}else{w=h+m|0;c[i+4>>2]=w|3;w=i+w+4|0;c[w>>2]=c[w>>2]|1}while(0);w=i+8|0;l=x;return w|0}else n=m}else n=m}else n=-1;while(0);d=c[14506]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[14509]|0;if(b>>>0>15){w=a+n|0;c[14509]=w;c[14506]=b;c[w+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=n|3}else{c[14506]=0;c[14509]=0;c[a+4>>2]=d|3;w=a+d+4|0;c[w>>2]=c[w>>2]|1}w=a+8|0;l=x;return w|0}i=c[14507]|0;if(i>>>0>n>>>0){u=i-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=p&-16^1431655768;a=4096}else a=c[14624]|0;j=n+48|0;k=n+47|0;h=a+k|0;f=0-a|0;m=h&f;if(m>>>0<=n>>>0){w=0;l=x;return w|0}a=c[14614]|0;if(a|0?(o=c[14612]|0,p=o+m|0,p>>>0<=o>>>0|p>>>0>a>>>0):0){w=0;l=x;return w|0}b:do if(!(c[14615]&4)){d=c[14510]|0;c:do if(d){e=58464;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(s=e+4|0,(a+(c[s>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){v=118;break c}else e=a}b=h-i&f;if(b>>>0<2147483647){a=aba(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[s>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{e=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){d=aba(0)|0;if((d|0)!=(-1|0)?(b=d,q=c[14623]|0,r=q+-1|0,b=((r&b|0)==0?0:(r+b&0-q)-b|0)+m|0,q=c[14612]|0,r=b+q|0,b>>>0>n>>>0&b>>>0<2147483647):0){s=c[14614]|0;if(s|0?r>>>0<=q>>>0|r>>>0>s>>>0:0){b=0;break}a=aba(b|0)|0;if((a|0)==(d|0)){h=b;g=d;v=135;break b}else{e=a;v=126}}else b=0}while(0);do if((v|0)==126){d=0-b|0;if(!(j>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;v=135;break b}a=c[14624]|0;a=k-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;v=135;break b}if((aba(a|0)|0)==(-1|0)){aba(d|0)|0;b=0;break}else{h=a+b|0;g=e;v=135;break b}}while(0);c[14615]=c[14615]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?m>>>0<2147483647:0)?(g=aba(m|0)|0,s=aba(0)|0,t=s-g|0,u=t>>>0>(n+40|0)>>>0,!((g|0)==(-1|0)|u^1|g>>>0>>0&((g|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=u?t:b;v=135}if((v|0)==135){b=(c[14612]|0)+h|0;c[14612]=b;if(b>>>0>(c[14613]|0)>>>0)c[14613]=b;j=c[14510]|0;do if(j){b=58464;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){v=143;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((v|0)==143?(c[b+12>>2]&8|0)==0:0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[d>>2]=e+h;w=(c[14507]|0)+h|0;u=j+8|0;u=(u&7|0)==0?0:0-u&7;v=j+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[j+w+4>>2]=40;c[14511]=c[14626];break}if(g>>>0<(c[14508]|0)>>>0)c[14508]=g;a=g+h|0;b=58464;while(1){if((c[b>>2]|0)==(a|0)){v=151;break}b=c[b+8>>2]|0;if(!b){a=58464;break}}if((v|0)==151)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+8|0;b=a+((b&7|0)==0?0:0-b&7)|0;k=m+n|0;i=b-m-n|0;c[m+4>>2]=n|3;do if((j|0)!=(b|0)){if((c[14509]|0)==(b|0)){w=(c[14506]|0)+i|0;c[14506]=w;c[14509]=k;c[k+4>>2]=w|1;c[k+w>>2]=w;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;d:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14504]=c[14504]&~(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)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}c[d>>2]=0}else{w=c[b+8>>2]|0;c[w+12>>2]=a;c[a+8>>2]=w}while(0);if(!g)break;d=c[b+28>>2]|0;e=58320+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{c[e>>2]=a;if(a|0)break;c[14505]=c[14505]&~(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=58056+(b<<1<<2)|0;a=c[14504]|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)b=0;else{if(f>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(u|v|b)+(w<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=58320+(b<<2)|0;c[k+28>>2]=b;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14505]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){v=192;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=191;break}else{a=a<<1;d=b}}if((v|0)==191){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((v|0)==192){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=k;c[v>>2]=k;c[k+8>>2]=w;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{w=(c[14507]|0)+i|0;c[14507]=w;c[14510]=k;c[k+4>>2]=w|1}while(0);w=m+8|0;l=x;return w|0}else a=58464;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(w=b+(c[a+4>>2]|0)|0,w>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=w+-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;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=d-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+d+4>>2]=40;c[14511]=c[14626];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14616];c[b+4>>2]=c[14617];c[b+8>>2]=c[14618];c[b+12>>2]=c[14619];c[14616]=g;c[14617]=h;c[14619]=0;c[14618]=b;b=a+24|0;do{v=b;b=b+4|0;c[b>>2]=7}while((v+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=58056+(b<<1<<2)|0;a=c[14504]|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)d=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;d=14-(u|v|d)+(w<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=58320+(d<<2)|0;c[j+28>>2]=d;c[j+20>>2]=0;c[f>>2]=0;b=c[14505]|0;a=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(g|0)){v=213;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){v=212;break}else{a=a<<1;d=b}}if((v|0)==212){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((v|0)==213){v=d+8|0;w=c[v>>2]|0;c[w+12>>2]=j;c[v>>2]=j;c[j+8>>2]=w;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{w=c[14508]|0;if((w|0)==0|g>>>0>>0)c[14508]=g;c[14616]=g;c[14617]=h;c[14619]=0;c[14513]=c[14622];c[14512]=-1;c[14517]=58056;c[14516]=58056;c[14519]=58064;c[14518]=58064;c[14521]=58072;c[14520]=58072;c[14523]=58080;c[14522]=58080;c[14525]=58088;c[14524]=58088;c[14527]=58096;c[14526]=58096;c[14529]=58104;c[14528]=58104;c[14531]=58112;c[14530]=58112;c[14533]=58120;c[14532]=58120;c[14535]=58128;c[14534]=58128;c[14537]=58136;c[14536]=58136;c[14539]=58144;c[14538]=58144;c[14541]=58152;c[14540]=58152;c[14543]=58160;c[14542]=58160;c[14545]=58168;c[14544]=58168;c[14547]=58176;c[14546]=58176;c[14549]=58184;c[14548]=58184;c[14551]=58192;c[14550]=58192;c[14553]=58200;c[14552]=58200;c[14555]=58208;c[14554]=58208;c[14557]=58216;c[14556]=58216;c[14559]=58224;c[14558]=58224;c[14561]=58232;c[14560]=58232;c[14563]=58240;c[14562]=58240;c[14565]=58248;c[14564]=58248;c[14567]=58256;c[14566]=58256;c[14569]=58264;c[14568]=58264;c[14571]=58272;c[14570]=58272;c[14573]=58280;c[14572]=58280;c[14575]=58288;c[14574]=58288;c[14577]=58296;c[14576]=58296;c[14579]=58304;c[14578]=58304;w=h+-40|0;u=g+8|0;u=(u&7|0)==0?0:0-u&7;v=g+u|0;u=w-u|0;c[14510]=v;c[14507]=u;c[v+4>>2]=u|1;c[g+w+4>>2]=40;c[14511]=c[14626]}while(0);b=c[14507]|0;if(b>>>0>n>>>0){u=b-n|0;c[14507]=u;w=c[14510]|0;v=w+n|0;c[14510]=v;c[v+4>>2]=u|1;c[w+4>>2]=n|3;w=w+8|0;l=x;return w|0}}c[(N7()|0)>>2]=12;w=0;l=x;return w|0}function E7(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[14508]|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[14509]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14506]=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[14504]=c[14504]&~(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)){d=h+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(j|0)){j=(c[14507]|0)+b|0;c[14507]=j;c[14510]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(j|0)){j=(c[14506]|0)+b|0;c[14506]=j;c[14509]=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[14504]=c[14504]&~(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)){d=j+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}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=58320+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(j|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(a<<1<<2)|0;b=c[14504]|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)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=58320+(a<<2)|0;c[i+28>>2]=a;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14505]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=i;c[i+24>>2]=d;c[i+12>>2]=i;c[i+8>>2]=i;break}else if((a|0)==73){h=d+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]=d;c[i+24>>2]=0;break}}else{c[14505]=b|d;c[e>>2]=i;c[i+24>>2]=e;c[i+12>>2]=i;c[i+8>>2]=i}while(0);j=(c[14512]|0)+-1|0;c[14512]=j;if(!j)a=58472;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14512]=-1;return}function F7(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=D7(b)|0;return b|0}if(b>>>0>4294967231){c[(N7()|0)>>2]=12;b=0;return b|0}d=G7(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=D7(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;Zaa(d|0,a|0,(e>>>0>>0?e:b)|0)|0;E7(a);b=d;return b|0}function G7(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[14624]<<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;H7(k,d);return a|0}if((c[14510]|0)==(i|0)){k=(c[14507]|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[14510]=e;c[14507]=d;return a|0}if((c[14509]|0)==(i|0)){e=(c[14506]|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[14506]=d;c[14509]=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[14504]=c[14504]&~(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)){f=i+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){f=0;break}else g=f}else g=e;while(1){f=d+20|0;e=c[f>>2]|0;if(e|0){d=e;g=f;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}c[g>>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=58320+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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]=j|m&1|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;H7(i,k);return a|0}return 0}function H7(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[14509]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14506]=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[14504]=c[14504]&~(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)){e=h+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}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=58320+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14505]=c[14505]&~(1<>2]|0)!=(h|0)&1)<<2)>>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[14510]|0)==(i|0)){i=(c[14507]|0)+b|0;c[14507]=i;c[14510]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14509]|0))return;c[14509]=0;c[14506]=0;return}if((c[14509]|0)==(i|0)){i=(c[14506]|0)+b|0;c[14506]=i;c[14509]=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[14504]=c[14504]&~(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)){d=i+16|0;a=d+4|0;b=c[a>>2]|0;if(!b){b=c[d>>2]|0;if(!b){d=0;break}else a=d}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}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=58320+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14505]=c[14505]&~(1<>2]|0)!=(i|0)&1)<<2)>>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[14509]|0)){c[14506]=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=58056+(b<<1<<2)|0;a=c[14504]|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)b=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;b=14-(e|g|b)+(i<>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=58320+(b<<2)|0;c[h+28>>2]=b;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14505]|0;d=1<>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;return}a=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){b=69;break}e=d+16+(a>>>31<<2)|0;b=c[e>>2]|0;if(!b){b=68;break}else{a=a<<1;d=b}}if((b|0)==68){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;return}else if((b|0)==69){g=d+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]=d;c[h+24>>2]=0;return}}function I7(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+16|0;if(!(c[14622]|0)){c[14624]=4096;c[14623]=4096;c[14625]=-1;c[14626]=-1;c[14627]=0;c[14615]=0;c[14622]=n&-16^1431655768}m=c[14510]|0;if(!m){i=0;h=0;g=0;d=0;e=0;f=0;b=0}else{h=c[14507]|0;b=h+40|0;k=58464;d=b;g=1;do{i=c[k>>2]|0;f=i+8|0;j=i+(c[k+4>>2]|0)|0;f=i+((f&7|0)==0?0:0-f&7)|0;do{if(f>>>0>=j>>>0|(m|0)==(f|0))break;e=c[f+4>>2]|0;if((e|0)==7)break;o=e&-8;d=o+d|0;e=(e&3|0)==1;g=g+(e&1)|0;b=(e?o:0)+b|0;f=f+o|0}while(f>>>0>=i>>>0);k=c[k+8>>2]|0}while((k|0)!=0);f=c[14612]|0;i=d;d=f-d|0;e=c[14613]|0;f=f-b|0}c[a>>2]=i;c[a+4>>2]=g;o=a+8|0;c[o>>2]=0;c[o+4>>2]=0;c[a+16>>2]=d;c[a+20>>2]=e;c[a+24>>2]=0;c[a+28>>2]=f;c[a+32>>2]=b;c[a+36>>2]=h;l=n;return}function J7(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=P7(c[a+60>>2]|0)|0;a=M7(Pb(6,d|0)|0)|0;l=b;return a|0}function K7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,Ob(54,f|0)|0):0)a[b+75>>0]=-1;f=O7(b,d,e)|0;l=g;return f|0}function L7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+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((M7(Jb(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function M7(a){a=a|0;if(a>>>0>4294963200){c[(N7()|0)>>2]=0-a;a=-1}return a|0}function N7(){return 58576}function O7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=M7(Lb(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=b+(o<<31>>31)|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=M7(Lb(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function P7(a){a=a|0;return a|0}function Q7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+32|0;f=k;i=k+16|0;c[i>>2]=d;g=i+4|0;j=b+48|0;m=c[j>>2]|0;c[g>>2]=e-((m|0)!=0&1);h=b+44|0;c[i+8>>2]=c[h>>2];c[i+12>>2]=m;c[f>>2]=c[b+60>>2];c[f+4>>2]=i;c[f+8>>2]=2;f=M7(Kb(145,f|0)|0)|0;if((f|0)>=1){i=c[g>>2]|0;if(f>>>0>i>>>0){g=c[h>>2]|0;h=b+4|0;c[h>>2]=g;c[b+8>>2]=g+(f-i);if(!(c[j>>2]|0))f=e;else{c[h>>2]=g+1;a[d+(e+-1)>>0]=a[g>>0]|0;f=e}}}else c[b>>2]=c[b>>2]|f&48^16;l=k;return f|0}function R7(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=d&255;f=(e|0)!=0;a:do if(f&(b&3|0)!=0){g=d&255;while(1){if((a[b>>0]|0)==g<<24>>24){i=6;break a}b=b+1|0;e=e+-1|0;f=(e|0)!=0;if(!(f&(b&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(f)i=6;else e=0;b:do if((i|0)==6){g=d&255;if((a[b>>0]|0)!=g<<24>>24){f=O(h,16843009)|0;c:do if(e>>>0>3)while(1){h=c[b>>2]^f;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!e){e=0;break}while(1){if((a[b>>0]|0)==g<<24>>24)break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}while(0);return (e|0?b:0)|0}function S7(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;m=l;l=l+208|0;j=m+8|0;k=m;h=O(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)T7(a,d,e,f,j);else V7(a,d,e,k,f,0,j);if((f|0)==1){W7(k,1);f=0;break}else{W7(k,b);f=1;break}}else{T7(a,d,e,f,j);U7(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}V7(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 if((f|0)>=2){W7(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;U7(k,1);V7(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);W7(k,1);b=c[k>>2]|1;c[k>>2]=b;h=a+i|0;V7(h,d,e,k,n,1,j);a=h;f=n;continue}b=X7(k)|0;U7(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}while(0);l=m;return} +function gz(b){b=b|0;var e=0,f=0;e=a[b>>0]|0;f=e&255;a:do if((e&255)>31){if(e<<24>>24<0){hz((c[14484]|0)+(0-(d[b+1>>0]|0))+-1|0,f+-127|0);b=b+2|0;break}if((e&255)>63){hz((c[14484]|0)+(16383-(f<<8|(d[b+1>>0]|0)))|0,(d[b+2>>0]|0)+1|0);b=b+3|0;break}else{iz(b+1|0,f+-31|0);b=b+((d[b>>0]|0)+-30)|0;break}}else{if((e&255)>23){hz((c[14484]|0)+(1572863-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,(d[b+3>>0]|0)+1|0);b=b+4|0;break}if((e&255)>15){hz((c[14484]|0)+(1048575-(f<<16|(d[b+2>>0]|0)|(d[b+1>>0]|0)<<8))|0,((d[b+3>>0]|0)<<8|(d[b+4>>0]|0))+1|0);b=b+5|0;break}if((e&255)>7){e=b+1|0;iz(b+2|0,(f<<8|(d[e>>0]|0))+-2047|0);b=b+(((d[b>>0]|0)<<8|(d[e>>0]|0))+-2045)|0;break}switch(e<<24>>24){case 7:{e=b+1|0;f=b+2|0;iz(b+3|0,((d[e>>0]|0)<<8|(d[f>>0]|0))+1|0);b=b+(((d[e>>0]|0)<<8|(d[f>>0]|0))+4)|0;break a}case 6:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,(d[b+4>>0]|0)+1|0);b=b+5|0;break a}case 4:{hz((c[14484]|0)+~((d[b+1>>0]|0)<<16|(d[b+3>>0]|0)|(d[b+2>>0]|0)<<8)|0,((d[b+4>>0]|0)<<8|(d[b+5>>0]|0))+1|0);b=b+6|0;break a}default:break a}}while(0);return b|0}function hz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=c[14484]|0;g=c[14482]|0;if((f+d|0)>>>0>g>>>0)Cb(30024,12849,2705,30068);if((c[14483]|0)>>>0<=b>>>0){if(d|0?(e=d+-1|0,g=a[b>>0]|0,c[14484]=f+1,a[f>>0]=g,e|0):0){d=c[14484]|0;do{b=b+1|0;e=e+-1|0;g=d;d=d+1|0;a[g>>0]=a[b>>0]|0}while((e|0)!=0);c[14484]=d}}else c[14484]=g+1;return}function iz(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[14484]|0;d=c[14482]|0;if((e+b|0)>>>0>d>>>0)Cb(30024,12849,2713,30059);if((c[14480]|0)>>>0>a>>>0)b=1;else{Zaa(e|0,a|0,b|0)|0;d=c[14484]|0}c[14484]=d+b;return}function jz(a){a=a|0;return (a<<24>>24)-(a<<24>>24>91?36:35)|0}function kz(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;m=n;i=a+16|0;k=c[i>>2]|0;h=k;if(!k){Gw(a,m,0,0,0);h=a+20|0;k=a+24|0;j=Bf(O(c[h>>2]<<2,c[k>>2]|0)|0)|0;c[i>>2]=j;i=O(c[k>>2]|0,c[h>>2]|0)|0;h=j;if((i|0)>0){k=j;j=c[m>>2]|0;while(1){c[k>>2]=(d[j>>0]|0)<<24|16777215;if((i|0)>1){k=k+4|0;j=j+1|0;i=i+-1|0}else break}}}c[b>>2]=h;if(e|0)c[e>>2]=c[a+20>>2];if(f|0)c[f>>2]=c[a+24>>2];if(g|0)c[g>>2]=4;l=n;return}function lz(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;k=k|0;var m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+16|0;w=y;if(!j)j=i+(c8(i)|0)|0;r=e/+g[d>>2];df(b,0.0,0.0);s=h>0.0;a:do if(j>>>0>i>>>0){t=b+4|0;u=d+28|0;v=d+56|0;n=0.0;o=0;while(1){b:do if(s){if(!o){o=$v(d,r,i,j,h-n)|0;o=(o|0)==(i|0)?o+1|0:o}if(i>>>0>>0)x=14;else{if(+g[b>>2]>2]=n;g[t>>2]=+g[t>>2]+e;while(1){if(i>>>0>=j>>>0){n=0.0;o=0;break b}p=a[i>>0]|0;q=aw(p<<24>>24)|0;i=q|p<<24>>24==10?i+1|0:i;if(!q){n=0.0;o=0;break}}}}else x=14;while(0);if((x|0)==14){x=0;q=a[i>>0]|0;p=q<<24>>24;c[w>>2]=p;if(q<<24>>24<=-1){q=i+(Hf(w,i,j)|0)|0;p=c[w>>2]|0;if(!p){i=q;break}}else q=i+1|0;c:do if(p>>>0<32){switch(p|0){case 13:break c;case 10:break;default:{x=20;break c}}g[b>>2]=+gv(+g[b>>2],n);g[t>>2]=+g[t>>2]+e;n=0.0}else x=20;while(0);if((x|0)==20){x=0;if((p|0)<(c[u>>2]|0))p=Et(u,p)|0;else p=v;m=n+r*+g[p>>2];if(!(m>=f))n=m;else break}i=q}if(i>>>0>=j>>>0)break a}}else n=0.0;while(0);if(+g[b>>2]>2]=n;j=b+4|0;m=+g[j>>2];if(n>0.0|m==0.0)g[j>>2]=m+e;if(k|0)c[k>>2]=i;l=y;return}function mz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+48|0;h=q+24|0;i=q+8|0;o=q+32|0;p=q+16|0;n=q;g[h>>2]=d;g[i>>2]=e;if(!(e==d)){if(d>e){nz(h,i);d=+g[h>>2];e=+g[i>>2]}m=b+8|0;k=+oz(+g[b>>2],+g[m>>2],d);i=b+4|0;df(o,k,+g[i>>2]);k=+oz(+g[b>>2],+g[m>>2],e);h=b+12|0;df(p,k,+g[h>>2]);if(f==0.0)Qv(a,o,p,c,0.0,15);else{r=+g[b>>2];k=+gw(+Nv((+g[m>>2]-r)*.5,(+g[h>>2]-+g[i>>2])*.5)+-1.0,0.0,f);j=1.0/k;f=+g[o>>2];e=+pz(1.0-j*(f-r));d=+pz(1.0-j*(+g[p>>2]-r));f=+gv(f,r+k);do if(!(e==d))if(e==0.0&d==1.5707963705062866){df(n,f,+g[p+4>>2]-k);Hv(a,n,k,3,6);df(n,f,k+ +g[o+4>>2]);Hv(a,n,k,6,9);break}else{df(n,f,+g[p+4>>2]-k);Iv(a,n,k,3.1415927410125732-d,3.1415927410125732-e,3);df(n,f,k+ +g[o+4>>2]);Iv(a,n,k,e+3.1415927410125732,d+3.1415927410125732,3);break}else{df(n,f,+g[p+4>>2]);ij(a,n);df(n,f,+g[o+4>>2]);ij(a,n)}while(0);e=+g[p>>2];do if(e>k+ +g[b>>2]){r=+g[m>>2];f=+pz(1.0-j*(r-e));d=+pz(1.0-j*(r-+g[o>>2]));e=+Nv(e,r-k);if(f==d){df(n,e,+g[o+4>>2]);ij(a,n);df(n,e,+g[p+4>>2]);ij(a,n);break}if(f==0.0&d==1.5707963705062866){df(n,e,k+ +g[o+4>>2]);Hv(a,n,k,9,12);df(n,e,+g[p+4>>2]-k);Hv(a,n,k,0,3);break}else{df(n,e,k+ +g[o+4>>2]);Iv(a,n,k,-d,-f,3);df(n,e,+g[p+4>>2]-k);Iv(a,n,k,f,d,3);break}}while(0);rl(a,c)}}l=q;return}function nz(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;c[a>>2]=c[b>>2];c[b>>2]=d;return}function oz(a,b,c){a=+a;b=+b;c=+c;return +((b-a)*c+a)}function pz(a){a=+a;if(!(a<=0.0))if(!(a>=1.0))a=+H(+a);else a=0.0;else a=1.5707963705062866;return +a}function qz(a){a=a|0;return}function rz(){return}function sz(a){a=a|0;return}function tz(){uz();vz();wz();xz();yz();zz();Az();Bz();Cz();Dz();Ez();Fz();Gz();Hz();Iz();Jz();Kz();Lz();return}function uz(){j6(0);return}function vz(){I5(0);return}function wz(){_4(0);return}function xz(){M3(0);return}function yz(){a3(0);return}function zz(){a2(0);return}function Az(){v1(0);return}function Bz(){RZ(0);return}function Cz(){XY(0);return}function Dz(){AY(0);return}function Ez(){vX(0);return}function Fz(){GV(0);return}function Gz(){ZT(0);return}function Hz(){YT(58e3);return}function Iz(){YT(58004);return}function Jz(){YT(57992);return}function Kz(){YT(57996);return}function Lz(){Mz(0);return}function Mz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=l;l=l+32|0;d=g+12|0;e=g;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;f=Nz(30079)|0;if(f>>>0>4294967279)R9(e);if(f>>>0<11){a[e+11>>0]=f;b=e}else{h=f+16&-16;b=P9(h)|0;c[e>>2]=b;c[e+8>>2]=h|-2147483648;c[e+4>>2]=f}Oz(b,30079,f)|0;a[d>>0]=0;Pz(b+f|0,d);Qz(30084,e);T9(e);c[d>>2]=20;Rz(30098,d);c[d>>2]=2;Rz(30113,d);c[d>>2]=0;Sz(30127,d);c[d>>2]=8;Sz(30147,d);c[d>>2]=16;Sz(30166,d);h=Uz(10)|0;a[d>>0]=a[g+29>>0]|0;Vz(30186,h,d);h=Uz(11)|0;a[d>>0]=a[g+28>>0]|0;Vz(30192,h,d);h=Uz(12)|0;a[d>>0]=a[g+27>>0]|0;Vz(30201,h,d);Yz(30213,2);Yz(30222,_z(3)|0);Yz(30229,4);Yz(30238,5);bA(30247,aA(13)|0);bA(30262,aA(14)|0);bA(30280,aA(15)|0);gA(30296,fA(16)|0);gA(30314,fA(17)|0);Yz(30331,6);kA(30345,jA(8)|0);Yz(30351,7);nA(30355,mA(1)|0);Yz(30366,8);qA(30375,pA(4)|0);qA(30395,pA(5)|0);sA(30417,1);qA(30444,pA(6)|0);qA(30470,pA(7)|0);sA(30496,2);h=Uz(18)|0;a[d>>0]=a[g+26>>0]|0;Vz(30524,h,d);qA(30542,pA(8)|0);qA(30555,pA(9)|0);sA(30569,3);sA(30584,4);yA(30600,1);yA(30618,2);zA(30636,1);CA(30655,BA(2)|0);FA(30672,EA(10)|0);IA(30690,HA(4)|0);bA(30719,aA(19)|0);KA(30744,11);Yz(30767,9);FA(30786,EA(12)|0);FA(30799,EA(13)|0);KA(30813,OA(14)|0);Yz(30832,_z(10)|0);SA(30847,RA(3)|0);SA(30864,RA(4)|0);WA(30882,VA(5)|0);gA(30905,fA(20)|0);sA(30924,5);sA(30935,6);sA(30946,7);sA(30960,8);zA(30974,2);zA(30985,3);zA(30996,4);YA(31010,1);bA(31028,aA(21)|0);$A(31044,Uz(22)|0);bA(31060,aA(23)|0);Yz(31069,_z(11)|0);eB(31077,dB(15)|0);fB(31092,24);eB(31106,dB(16)|0);fB(31119,25);jB(31131,iB(17)|0);h=Uz(26)|0;a[d>>0]=a[g+25>>0]|0;Vz(31149,h,d);sA(31157,9);qA(31169,pA(18)|0);oB(31192,nB(5)|0);zA(31204,5);Yz(31218,12);sA(31231,10);zA(31245,6);Yz(31261,13);pB(31276,27);Yz(31299,14);pB(31321,28);Yz(31338,15);Yz(31354,16);YA(31364,2);Yz(31373,17);Yz(31381,18);bA(31389,aA(29)|0);zA(31395,7);zA(31402,8);Yz(31411,19);Yz(31422,20);qA(31431,pA(19)|0);sA(31444,11);sA(31458,12);sB(31472,30);zA(31485,9);zA(31499,10);qA(31513,pA(20)|0);qA(31531,pA(21)|0);sB(31550,31);Yz(31569,21);sA(31593,13);sA(31611,14);sA(31640,15);sA(31655,16);xB(31681,wB(6)|0);Yz(31689,22);yB(31700,3);zB(31715,1);AB(31730,1);zB(31745,2);AB(31761,2);yB(31777,4);bA(31793,aA(32)|0);Yz(31800,23);EB(31806,DB(4)|0);gA(31812,fA(33)|0);gA(31828,fA(34)|0);gA(31833,fA(35)|0);KB(31839,JB(22)|0);KB(31851,JB(23)|0);gA(31864,fA(36)|0);gA(31877,fA(37)|0);gA(31891,fA(38)|0);gA(31903,fA(39)|0);SB(31916,RB(24)|0);SB(31926,RB(25)|0);gA(31937,fA(40)|0);gA(31948,fA(41)|0);Yz(31960,24);YB(31967,XB(6)|0);$B(31974,_B(5)|0);YB(31986,XB(7)|0);dC(32002,cC(4)|0);gC(32008,fC(1)|0);YB(32020,XB(8)|0);kC(32029,jC(9)|0);nC(32043,mC(10)|0);qC(32055,pC(1)|0);qC(32065,pC(2)|0);uC(32079,tC(1)|0);kA(32091,jA(11)|0);Yz(32102,25);yC(32111,xC(1)|0);BC(32117,AC(1)|0);EC(32127,DC(2)|0);EC(32138,DC(3)|0);EC(32149,DC(4)|0);JC(32160,IC(1)|0);MC(32176,LC(1)|0);MC(32184,LC(2)|0);MC(32193,LC(3)|0);MC(32202,LC(4)|0);SC(32211,RC(1)|0);h=UC(1)|0;a[d>>0]=a[g+24>>0]|0;VC(32225,h,d);YC(32235,XC(2)|0);$C(32254,_C(1)|0);cD(32265,bD(2)|0);cD(32277,bD(3)|0);cD(32289,bD(4)|0);hD(32301,gD(2)|0);kA(32310,jA(12)|0);kA(32320,jA(13)|0);kA(32330,jA(14)|0);nD(32340,mD(1)|0);nD(32352,mD(2)|0);nD(32365,mD(3)|0);nD(32378,mD(4)|0);tD(32391,sD(1)|0);wD(32403,vD(3)|0);wD(32413,vD(4)|0);wD(32424,vD(5)|0);wD(32435,vD(6)|0);CD(32446,BD(1)|0);FD(32459,ED(2)|0);kA(32470,jA(15)|0);kA(32481,jA(16)|0);kA(32492,jA(17)|0);LD(32505,KD(5)|0);LD(32518,KD(6)|0);fB(32530,42);PD(32550,OD(9)|0);SD(32559,RD(18)|0);bA(32570,aA(43)|0);Yz(32579,26);Yz(32587,27);sA(32609,17);KA(32635,26);kA(32655,jA(19)|0);LD(32672,KD(7)|0);yC(32683,xC(7)|0);YB(32691,XB(10)|0);Yz(32705,28);_D(32719,ZD(27)|0);gA(32725,fA(44)|0);Yz(32736,29);Yz(32749,30);yA(32760,5);Yz(32777,31);yA(32792,6);Yz(32805,32);cE(32816,bE(11)|0);Yz(32826,33);fE(32834,eE(8)|0);gA(32843,fA(45)|0);jE(32853,iE(12)|0);$B(32874,_B(6)|0);kA(32885,jA(20)|0);jE(32901,iE(13)|0);pE(32923,oE(21)|0);jE(32947,iE(14)|0);Yz(32969,34);$B(32978,_B(7)|0);Yz(32990,35);fB(33008,46);eB(33017,dB(28)|0);fB(33027,47);Yz(33042,36);Yz(33052,37);gA(33063,fA(48)|0);uE(33071,15);xE(33091,wE(9)|0);Yz(33110,38);yA(33128,7);AE(33148,zE(7)|0);Yz(33170,39);DE(33188,CE(8)|0);Yz(33201,40);h=FE(49)|0;a[d>>0]=a[g+23>>0]|0;GE(33213,h,d);h=FE(50)|0;a[d>>0]=a[g+22>>0]|0;GE(33232,h,d);h=FE(51)|0;a[d>>0]=a[g+21>>0]|0;GE(33248,h,d);Yz(33265,41);fB(33285,52);JE(33306,8);yA(33320,8);JE(33333,9);yA(33347,9);yA(33361,10);yA(33378,11);qA(33394,pA(29)|0);qA(33409,pA(30)|0);qA(33424,pA(31)|0);Yz(33440,42);JE(33460,10);JE(33476,11);yA(33492,12);yA(33511,13);PE(33530,OE(16)|0);sA(33544,18);yB(33552,14);h=Uz(53)|0;a[d>>0]=a[g+20>>0]|0;Vz(33566,h,d);h=Uz(54)|0;a[d>>0]=a[g+19>>0]|0;Vz(33585,h,d);UE(33607,TE(32)|0);XE(33625,WE(1)|0);_E(33650,ZE(1)|0);bF(33663,aF(1)|0);cF(33680,22);Yz(33696,43);fF(33710,eF(9)|0);gF(33734,12);jF(33758,iF(1)|0);jF(33779,iF(2)|0);lF(33800,13);JE(33812,14);mF(33822,17);JE(33835,15);nF(33849,1);JE(33869,16);mF(33881,18);JE(33896,17);JE(33917,18);oF(33933,1);rF(33949,qF(23)|0);uF(33969,tF(19)|0);qA(33985,pA(33)|0);qA(33997,pA(34)|0);zF(34030,yF(1)|0);fB(34048,55);yB(34068,15);fB(34083,56);pB(34098,57);pB(34121,58);h=BF(35)|0;a[d>>0]=a[g+18>>0]|0;CF(34141,h,d);bA(34150,aA(59)|0);GF(34158,FF(60)|0);bA(34175,aA(61)|0);GF(34192,FF(62)|0);h=Uz(63)|0;a[d>>0]=a[g+17>>0]|0;Vz(34203,h,d);bA(34217,aA(64)|0);h=Uz(65)|0;a[d>>0]=a[g+16>>0]|0;Vz(34232,h,d);bA(34250,aA(66)|0);l=g;return}function Nz(a){a=a|0;return c8(a)|0}function Oz(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)Zaa(a|0,b|0,c|0)|0;return a|0}function Pz(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return}function Qz(a,b){a=a|0;b=b|0;var c=0;c=VT()|0;Wb(a|0,c|0,WT(tG(b)|0)|0);return}function Rz(a,b){a=a|0;b=b|0;var c=0;c=ST()|0;Wb(a|0,c|0,TT(xI(b)|0)|0);return}function Sz(a,b){a=a|0;b=b|0;var c=0;c=fI()|0;Wb(a|0,c|0,RT(RH(b)|0)|0);return}function Tz(a){a=a|0;JT(a);return}function Uz(a){a=a|0;return a|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=HT(d)|0;d=IT(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function Wz(a){a=a|0;zT(a);return}function Xz(a){a=a|0;rT(a);return}function Yz(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mT(d)|0;d=nT(d)|0;Zb(a|0,e|0,d|0,oT()|0,67,b|0);l=c;return}function Zz(){lT();return}function _z(a){a=a|0;return a|0}function $z(a){a=a|0;kT(a);return}function aA(a){a=a|0;return a|0}function bA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gT(d)|0;d=hT(d)|0;Zb(a|0,e|0,d|0,RJ()|0,36,b|0);l=c;return}function cA(a){a=a|0;fT(a);return}function dA(a){a=a|0;$S(a);return}function eA(a){a=a|0;return}function fA(a){a=a|0;return a|0}function gA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XS(d)|0;d=YS(d)|0;Zb(a|0,e|0,d|0,RJ()|0,37,b|0);l=c;return}function hA(a){a=a|0;return}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return WS(a,b,c)|0}function jA(a){a=a|0;return a|0}function kA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SS(d)|0;d=TS(d)|0;Zb(a|0,e|0,d|0,DH()|0,10,b|0);l=c;return}function lA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return RS(a,b,c,d)|0}function mA(a){a=a|0;return a|0}function nA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NS(d)|0;d=OS(d)|0;Zb(a|0,e|0,d|0,hK()|0,8,b|0);l=c;return}function oA(a,b){a=a|0;b=b|0;MS(a,b);return}function pA(a){a=a|0;return a|0}function qA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IS(d)|0;d=JS(d)|0;Zb(a|0,e|0,d|0,EG()|0,19,b|0);l=c;return}function rA(a,b){a=a|0;b=b|0;HS(a,b);return}function sA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=ES(d)|0;d=xH(d)|0;Zb(a|0,e|0,d|0,FS()|0,3,b|0);l=c;return}function tA(a,b){a=a|0;b=b|0;DS(a,b);return}function uA(a,b){a=a|0;b=b|0;CS(a,b);return}function vA(a){a=a|0;BS(a);return}function wA(a,b){a=a|0;b=b|0;AS(a,b);return}function xA(a,b){a=a|0;b=b|0;zS(a,b);return}function yA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xS(d)|0;d=IK(d)|0;Zb(a|0,e|0,d|0,rG()|0,21,b|0);l=c;return}function zA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sS(d)|0;d=tS(d)|0;Zb(a|0,e|0,d|0,uS()|0,3,b|0);l=c;return}function AA(a,b,c){a=a|0;b=b|0;c=c|0;rS(a,b,c);return}function BA(a){a=a|0;return a|0}function CA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nS(d)|0;d=oS(d)|0;Zb(a|0,e|0,d|0,YJ()|0,5,b|0);l=c;return}function DA(a,b){a=a|0;b=b|0;mS(a,b);return}function EA(a){a=a|0;return a|0}function FA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=iS(d)|0;d=jS(d)|0;Zb(a|0,e|0,d|0,eL()|0,10,b|0);l=c;return}function GA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ZR(a,b,c,d);return}function HA(a){a=a|0;return a|0}function IA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UR(d)|0;d=VR(d)|0;Zb(a|0,e|0,d|0,WR()|0,4,b|0);l=c;return}function JA(a){a=a|0;TR(a);return}function KA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PR(d)|0;d=QR(d)|0;Zb(a|0,e|0,d|0,eL()|0,11,b|0);l=c;return}function LA(a,b){a=a|0;b=b|0;OR(a,b);return}function MA(a,b){a=a|0;b=b|0;NR(a,b);return}function NA(a,b){a=a|0;b=b|0;MR(a,b);return}function OA(a){a=a|0;return a|0}function PA(){LR();return}function QA(a,b,c){a=a|0;b=b|0;c=c|0;KR(a,b,c);return}function RA(a){a=a|0;return a|0}function SA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=GR(d)|0;d=HR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,6,b|0);l=c;return}function TA(a,b,c){a=a|0;b=b|0;c=c|0;FR(a,b,c);return}function UA(a,b,c){a=a|0;b=b|0;c=c|0;ER(a,b,c);return}function VA(a){a=a|0;return a|0}function WA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AR(d)|0;d=BR(d)|0;Zb(a|0,e|0,d|0,YJ()|0,7,b|0);l=c;return}function XA(a){a=a|0;zR(a);return}function YA(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uR(d)|0;d=vR(d)|0;Zb(a|0,e|0,d|0,wR()|0,1,b|0);l=c;return}function ZA(a){a=a|0;tR();return}function _A(a){a=a|0;sR(a);return}function $A(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oR(d)|0;d=pR(d)|0;Zb(a|0,e|0,d|0,rG()|0,20,b|0);l=c;return}function aB(a){a=a|0;nR();return}function bB(){mR();return}function cB(a,b){a=a|0;b=b|0;lR(a,b);return}function dB(a){a=a|0;return a|0}function eB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=hR(d)|0;d=iR(d)|0;Zb(a|0,e|0,d|0,eL()|0,12,b|0);l=c;return}function fB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=dR(d)|0;d=eR(d)|0;Zb(a|0,e|0,d|0,RJ()|0,38,b|0);l=c;return}function gB(a,b){a=a|0;b=b|0;cR(a,b);return}function hB(a,b){a=a|0;b=b|0;WQ(a,b);return}function iB(a){a=a|0;return a|0}function jB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SQ(d)|0;d=TQ(d)|0;Zb(a|0,e|0,d|0,EG()|0,20,b|0);l=c;return}function kB(a){a=a|0;KQ(a);return}function lB(a,b){a=a|0;b=b|0;JQ(a,b);return}function mB(a,b){a=a|0;b=b|0;return IQ(a,b)|0}function nB(a){a=a|0;return a|0}function oB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EQ(d)|0;d=FQ(d)|0;Zb(a|0,e|0,d|0,VH()|0,24,b|0);l=c;return}function pB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AQ(d)|0;d=BQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,39,b|0);l=c;return}function qB(a){a=a|0;zQ(a);return}function rB(a,b){a=a|0;b=b|0;yQ(a,b);return}function sB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=uQ(d)|0;d=vQ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,40,b|0);l=c;return}function tB(a,b){a=a|0;b=b|0;tQ(a,b);return}function uB(a,b){a=a|0;b=b|0;sQ(a,b);return}function vB(a,b,c){a=a|0;b=b|0;c=c|0;rQ(a,b,c);return}function wB(a){a=a|0;return a|0}function xB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nQ(d)|0;d=oQ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,8,b|0);l=c;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lQ(d)|0;d=qL(d)|0;Zb(a|0,e|0,d|0,rG()|0,22,b|0);l=c;return}function zB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gQ(d)|0;d=hQ(d)|0;Zb(a|0,e|0,d|0,iQ()|0,1,b|0);l=c;return}function AB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=bQ(d)|0;d=cQ(d)|0;Zb(a|0,e|0,d|0,dQ()|0,1,b|0);l=c;return}function BB(a){a=a|0;aQ(a);return}function CB(a){a=a|0;return $P(a)|0}function DB(a){a=a|0;return a|0}function EB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XP(d)|0;d=YP(d)|0;Zb(a|0,e|0,d|0,EG()|0,21,b|0);l=c;return}function FB(a){a=a|0;WP(a);return}function GB(a){a=a|0;VP(a);return}function HB(a){a=a|0;UP(a);return}function IB(a,b){a=a|0;b=b|0;TP(a,b);return}function JB(a){a=a|0;return a|0}function KB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=PP(d)|0;d=QP(d)|0;Zb(a|0,e|0,d|0,eL()|0,13,b|0);l=c;return}function LB(a,b){a=a|0;b=b|0;OP(a,b);return}function MB(a){a=a|0;NP(a);return}function NB(a){a=a|0;MP(a);return}function OB(a){a=a|0;LP(a);return}function PB(a){a=a|0;KP(a);return}function QB(a,b){a=a|0;b=b|0;JP(a,b);return}function RB(a){a=a|0;return a|0}function SB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FP(d)|0;d=GP(d)|0;Zb(a|0,e|0,d|0,eL()|0,14,b|0);l=c;return}function TB(a,b){a=a|0;b=b|0;EP(a,b);return}function UB(a){a=a|0;DP(a);return}function VB(a){a=a|0;CP(a);return}function WB(a,b){a=a|0;b=b|0;return BP(a,b)|0}function XB(a){a=a|0;return a|0}function YB(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xP(d)|0;d=yP(d)|0;Zb(a|0,e|0,d|0,VH()|0,25,b|0);l=c;return}function ZB(a){a=a|0;return wP(a)|0}function _B(a){a=a|0;return a|0}function $B(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=sP(d)|0;d=tP(d)|0;Zb(a|0,e|0,d|0,EG()|0,22,b|0);l=c;return}function aC(a,b){a=a|0;b=b|0;return rP(a,b)|0}function bC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qP(b,c,d,e,f);return}function cC(a){a=a|0;return a|0}function dC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lP(d)|0;d=mP(d)|0;Zb(a|0,e|0,d|0,nP()|0,1,b|0);l=c;return}function eC(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 kP(b,c,d,e,f,g)|0}function fC(a){a=a|0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=gP(d)|0;d=hP(d)|0;Zb(a|0,e|0,d|0,WM()|0,1,b|0);l=c;return}function hC(a,b){a=a|0;b=b|0;return fP(a,b)|0}function iC(a,b,c){a=a|0;b=b|0;c=c|0;return VO(a,b,c)|0}function jC(a){a=a|0;return a|0}function kC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RO(d)|0;d=SO(d)|0;Zb(a|0,e|0,d|0,DH()|0,11,b|0);l=c;return}function lC(a,b,c){a=a|0;b=b|0;c=c|0;return QO(a,b,c)|0}function mC(a){a=a|0;return a|0}function nC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=MO(d)|0;d=NO(d)|0;Zb(a|0,e|0,d|0,DH()|0,12,b|0);l=c;return}function oC(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;JO(a,b,c,d,e,f,g,h,i);return}function pC(a){a=a|0;return a|0}function qC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=EO(d)|0;d=FO(d)|0;Zb(a|0,e|0,d|0,GO()|0,1,b|0);l=c;return}function rC(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;sO(a,b,c,d,e,f,g,h,i);return}function sC(a,b,c){a=+a;b=b|0;c=c|0;rO(a,b,c);return}function tC(a){a=a|0;return a|0}function uC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=mO(d)|0;d=nO(d)|0;Zb(a|0,e|0,d|0,oO()|0,2,b|0);l=c;return}function vC(a,b,c){a=a|0;b=b|0;c=c|0;return lO(a,b,c)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return iO(a,b,c,d,e)|0}function xC(a){a=a|0;return a|0}function yC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eO(d)|0;d=fO(d)|0;Zb(a|0,e|0,d|0,gM()|0,3,b|0);l=c;return}function zC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return dO(a,b,c,d,e,f,g)|0}function AC(a){a=a|0;return a|0}function BC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$N(d)|0;d=aO(d)|0;Zb(a|0,e|0,d|0,XN()|0,1,b|0);l=c;return}function CC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return _N(a,b,c,d,e,f,g)|0}function DC(a){a=a|0;return a|0}function EC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VN(d)|0;d=WN(d)|0;Zb(a|0,e|0,d|0,XN()|0,2,b|0);l=c;return}function FC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return UN(a,b,c,d,e,f,g)|0}function GC(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;return TN(a,b,c,d,e,f,g)|0}function HC(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;return SN(a,b,c,d,e,f,g,h,i)|0}function IC(a){a=a|0;return a|0}function JC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NN(d)|0;d=ON(d)|0;Zb(a|0,e|0,d|0,PN()|0,1,b|0);l=c;return}function KC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return MN(a,b,c,d,e,f)|0}function LC(a){a=a|0;return a|0}function MC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=HN(d)|0;d=IN(d)|0;Zb(a|0,e|0,d|0,JN()|0,1,b|0);l=c;return}function NC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return GN(a,b,c,d,e,f)|0}function OC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return FN(a,b,c,d,e,f)|0}function PC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;return EN(a,b,c,d,e,f)|0}function QC(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;return DN(a,b,c,d,e,f,g,h)|0}function RC(a){a=a|0;return a|0}function SC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=yN(d)|0;d=zN(d)|0;Zb(a|0,e|0,d|0,AN()|0,1,b|0);l=c;return}function TC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return vN(a,b,c,d,e,f)|0}function UC(a){a=a|0;return a|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=rN(d)|0;d=sN(d)|0;Zb(a|0,e|0,d|0,TL()|0,3,b|0);l=c;return}function WC(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 ZM(a,b,c,d,e,f,g)|0}function XC(a){a=a|0;return a|0}function YC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=UM(d)|0;d=VM(d)|0;Zb(a|0,e|0,d|0,WM()|0,2,b|0);l=c;return}function ZC(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;return TM(a,b,c,d,e,f)|0}function _C(a){a=a|0;return a|0}function $C(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=OM(d)|0;d=PM(d)|0;Zb(a|0,e|0,d|0,QM()|0,1,b|0);l=c;return}function aD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NM(a,b,c,d)|0}function bD(a){a=a|0;return a|0}function cD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JM(d)|0;d=KM(d)|0;Zb(a|0,e|0,d|0,hK()|0,9,b|0);l=c;return}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return IM(a,b,c,d)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HM(a,b,c,d)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return GM(a,b,c,d,e)|0}function gD(a){a=a|0;return a|0}function hD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CM(d)|0;d=DM(d)|0;Zb(a|0,e|0,d|0,gM()|0,4,b|0);l=c;return}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return BM(a,b,c)|0}function jD(a,b,c){a=a|0;b=b|0;c=c|0;return AM(a,b,c)|0}function kD(a,b,c){a=a|0;b=b|0;c=c|0;return zM(a,b,c)|0}function lD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return yM(a,b,c,d,e,f)|0}function mD(a){a=a|0;return a|0}function nD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tM(d)|0;d=uM(d)|0;Zb(a|0,e|0,d|0,vM()|0,2,b|0);l=c;return}function oD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return sM(a,b,c,d,e,f)|0}function pD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return rM(a,b,c,d,e,f)|0}function qD(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;return qM(a,b,c,d,e,f)|0}function rD(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return pM(a,b,c,d)|0}function sD(a){a=a|0;return a|0}function tD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=kM(d)|0;d=lM(d)|0;Zb(a|0,e|0,d|0,mM()|0,1,b|0);l=c;return}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return jM(a,b,c,d,e)|0}function vD(a){a=a|0;return a|0}function wD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=eM(d)|0;d=fM(d)|0;Zb(a|0,e|0,d|0,gM()|0,5,b|0);l=c;return}function xD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return dM(a,b,c,d,e)|0}function yD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cM(a,b,c,d,e)|0}function zD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return bM(a,b,c,d,e)|0}function AD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return aM(a,b,c,d,e,f,g)|0}function BD(a){a=a|0;return a|0}function CD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=XL(d)|0;d=YL(d)|0;Zb(a|0,e|0,d|0,ZL()|0,1,b|0);l=c;return}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 WL(a,b,c,d,e,f)|0}function ED(a){a=a|0;return a|0}function FD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=RL(d)|0;d=SL(d)|0;Zb(a|0,e|0,d|0,TL()|0,4,b|0);l=c;return}function GD(a,b,c){a=a|0;b=b|0;c=c|0;return QL(a,b,c)|0}function HD(a,b,c){a=a|0;b=b|0;c=c|0;return PL(a,b,c)|0}function ID(a,b,c){a=a|0;b=b|0;c=c|0;return OL(a,b,c)|0}function JD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return NL(a,b,c)|0}function KD(a){a=a|0;return a|0}function LD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JL(d)|0;d=KL(d)|0;Zb(a|0,e|0,d|0,hK()|0,10,b|0);l=c;return}function MD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return HL(a,b,c,d)|0}function ND(a,b){a=a|0;b=b|0;return GL(a,b)|0}function OD(a){a=a|0;return a|0}function PD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=CL(d)|0;d=DL(d)|0;Zb(a|0,e|0,d|0,VH()|0,26,b|0);l=c;return}function QD(a,b,c){a=a|0;b=b|0;c=c|0;return BL(a,b,c)|0}function RD(a){a=a|0;return a|0}function SD(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=xL(d)|0;d=yL(d)|0;Zb(a|0,e|0,d|0,DH()|0,13,b|0);l=c;return}function TD(a){a=a|0;wL(a);return}function UD(a,b,c){a=a|0;b=b|0;c=c|0;return vL(a,b,c)|0}function VD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return uL(a,b,c,d)|0}function WD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return lL(a,b,c,d,e)|0}function XD(a,b){a=a|0;b=b|0;return kL(a,b)|0}function YD(a,b){a=a|0;b=b|0;hL(a,b);return}function ZD(a){a=a|0;return a|0}function _D(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=cL(d)|0;d=dL(d)|0;Zb(a|0,e|0,d|0,eL()|0,15,b|0);l=c;return}function $D(a){a=a|0;bL(a);return}function aE(a,b){a=a|0;b=b|0;return aL(a,b)|0}function bE(a){a=a|0;return a|0}function cE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YK(d)|0;d=ZK(d)|0;Zb(a|0,e|0,d|0,VH()|0,27,b|0);l=c;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return XK(a,b,c,d)|0}function eE(a){a=a|0;return a|0}function fE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TK(d)|0;d=UK(d)|0;Zb(a|0,e|0,d|0,hK()|0,11,b|0);l=c;return}function gE(a){a=a|0;SK(a);return}function hE(a,b){a=a|0;b=b|0;return RK(a,b)|0}function iE(a){a=a|0;return a|0}function jE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NK(d)|0;d=OK(d)|0;Zb(a|0,e|0,d|0,VH()|0,28,b|0);l=c;return}function kE(a){a=a|0;return MK(a)|0}function lE(a,b,c){a=a|0;b=b|0;c=c|0;return zK(a,b,c)|0}function mE(a,b){a=a|0;b=b|0;return yK(a,b)|0}function nE(a,b,c){a=a|0;b=b|0;c=c|0;return xK(a,b,c)|0}function oE(a){a=a|0;return a|0}function pE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tK(d)|0;d=uK(d)|0;Zb(a|0,e|0,d|0,DH()|0,14,b|0);l=c;return}function qE(a,b){a=a|0;b=b|0;return sK(a,b)|0}function rE(a){a=a|0;return rK(a)|0}function sE(a,b){a=a|0;b=b|0;qK(a,b);return}function tE(a){a=a|0;pK(a);return}function uE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=lK(d)|0;d=mK(d)|0;Zb(a|0,e|0,d|0,VH()|0,29,b|0);l=c;return}function vE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;kK();return 0}function wE(a){a=a|0;return a|0}function xE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fK(d)|0;d=gK(d)|0;Zb(a|0,e|0,d|0,hK()|0,12,b|0);l=c;return}function yE(a,b,c){a=a|0;b=b|0;c=c|0;eK(a);return}function zE(a){a=a|0;return a|0}function AE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=aK(d)|0;d=bK(d)|0;Zb(a|0,e|0,d|0,VH()|0,30,b|0);l=c;return}function BE(a,b,c){a=a|0;b=b|0;c=c|0;$J(a,b,c);return}function CE(a){a=a|0;return a|0}function DE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=WJ(d)|0;d=XJ(d)|0;Zb(a|0,e|0,d|0,YJ()|0,9,b|0);l=c;return}function EE(a){a=a|0;VJ(a);return}function FE(a){a=a|0;return a|0}function GE(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=PJ(d)|0;d=QJ(d)|0;Zb(a|0,e|0,d|0,RJ()|0,41,b|0);l=c;return}function HE(a){a=a|0;OJ(a);return}function IE(a){a=a|0;NJ(a);return}function JE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=JJ(d)|0;d=KJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,23,b|0);l=c;return}function KE(a,b){a=a|0;b=b|0;IJ(a,b);return}function LE(a,b){a=a|0;b=b|0;HJ(a,b);return}function ME(a,b){a=a|0;b=b|0;GJ(a,b);return}function NE(a,b){a=a|0;b=b|0;return EJ(a,b)|0}function OE(a){a=a|0;return a|0}function PE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=AJ(d)|0;d=BJ(d)|0;Zb(a|0,e|0,d|0,VH()|0,31,b|0);l=c;return}function QE(a){a=a|0;sJ(a);return}function RE(a){a=a|0;kJ(a);return}function SE(a,b){a=a|0;b=b|0;jJ(a,b);return}function TE(a){a=a|0;return a|0}function UE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=fJ(d)|0;d=gJ(d)|0;Zb(a|0,e|0,d|0,EG()|0,24,b|0);l=c;return}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;eJ(a,b,c,d,e);return}function WE(a){a=a|0;return a|0}function XE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=$I(d)|0;d=aJ(d)|0;Zb(a|0,e|0,d|0,bJ()|0,1,b|0);l=c;return}function YE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;_I(a,b,d,e,f);return}function ZE(a){a=a|0;return a|0}function _E(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=VI(d)|0;d=WI(d)|0;Zb(a|0,e|0,d|0,XI()|0,1,b|0);l=c;return}function $E(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;PI(a,b,c,d);return}function aF(a){a=a|0;return a|0}function bF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=KI(d)|0;d=LI(d)|0;Zb(a|0,e|0,d|0,MI()|0,1,b|0);l=c;return}function cF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=FI(d)|0;d=GI(d)|0;Zb(a|0,e|0,d|0,DH()|0,15,b|0);l=c;return}function dF(a,b,c){a=a|0;b=b|0;c=c|0;DI(a,b,c);return}function eF(a){a=a|0;return a|0}function fF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=zI(d)|0;d=AI(d)|0;Zb(a|0,e|0,d|0,VH()|0,32,b|0);l=c;return}function gF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=tI(d)|0;d=uI(d)|0;Zb(a|0,e|0,d|0,EG()|0,25,b|0);l=c;return}function hF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;sI(a,b,c,d,e,f);return}function iF(a){a=a|0;return a|0}function jF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=nI(d)|0;d=oI(d)|0;Zb(a|0,e|0,d|0,pI()|0,1,b|0);l=c;return}function kF(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;aI(a,b,c,d,e,f);return}function lF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=YH(d)|0;d=ZH(d)|0;Zb(a|0,e|0,d|0,EG()|0,26,b|0);l=c;return}function mF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=TH(d)|0;d=UH(d)|0;Zb(a|0,e|0,d|0,VH()|0,33,b|0);l=c;return}function nF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=NH(d)|0;d=OH(d)|0;Zb(a|0,e|0,d|0,PH()|0,2,b|0);l=c;return}function oF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=IH(d)|0;d=JH(d)|0;Zb(a|0,e|0,d|0,KH()|0,1,b|0);l=c;return}function pF(a,b,c){a=a|0;b=b|0;c=c|0;return HH(a,b,c)|0}function qF(a){a=a|0;return a|0}function rF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=BH(d)|0;d=CH(d)|0;Zb(a|0,e|0,d|0,DH()|0,16,b|0);l=c;return}function sF(a){a=a|0;return tH(a)|0}function tF(a){a=a|0;return a|0}function uF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=oH(d)|0;d=pH(d)|0;Zb(a|0,e|0,d|0,EG()|0,27,b|0);l=c;return}function vF(a,b){a=a|0;b=b|0;nH(a,b);return}function wF(a,b){a=a|0;b=b|0;mH(a,b);return}function xF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;$G(a,b,c,d);return}function yF(a){a=a|0;return a|0}function zF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=SG(d)|0;d=TG(d)|0;Zb(a|0,e|0,d|0,UG()|0,1,b|0);l=c;return}function AF(a,b){a=a|0;b=b|0;KG(a,b);return}function BF(a){a=a|0;return a|0}function CF(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;c=l;l=l+16|0;d=c;e=CG(d)|0;d=DG(d)|0;Zb(a|0,e|0,d|0,EG()|0,28,b|0);l=c;return}function DF(a){a=a|0;vG(a);return}function EF(a){a=a|0;uG(a);return}function FF(a){a=a|0;return a|0}function GF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;d=c;e=qG(d)|0;d=lG(d)|0;Zb(a|0,e|0,d|0,rG()|0,23,b|0);l=c;return}function HF(a){a=a|0;jG(a);return}function IF(a){a=a|0;iG(a);return}function JF(a){a=a|0;hG(a);return}function KF(a){a=a|0;gG(a);return}function LF(a){a=a|0;XF(a);return}function MF(a){a=a|0;NF(a);return}function NF(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}wh(c);l=d;return}function OF(a){a=a|0;return (c[a>>2]|0)==2|0}function PF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(QF(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=SF(f)|0;TF(e);l=d;return b|0}function QF(a){a=a|0;return WF()|0}function RF(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function SF(a){a=+a;return VF(UF(a)|0)|0}function TF(a){a=a|0;nc(c[a>>2]|0);return}function UF(a){a=+a;return ~~a>>>0|0}function VF(a){a=a|0;return a|0}function WF(){return 1496}function XF(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=vh()|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function YF(a){a=a|0;fG(a,2);return}function ZF(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;_F(e,b);b=$F()|0;c[a>>2]=pc(b|0,aG(e)|0)|0;l=d;return}function _F(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;dG(e,cG(c[b>>2]|0)|0);eG(e);l=d;return}function $F(){return bG()|0}function aG(a){a=a|0;return a|0}function bG(){return 8}function cG(a){a=a|0;return a|0}function dG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function eG(a){a=a|0;return}function fG(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function gG(b){b=b|0;var c=0,d=0;d=l;l=l+16|0;c=d+1|0;if(OF(b)|0)c=0;else{a[c>>0]=a[d>>0]|0;c=PF(b,c)|0}yh(c);l=d;return}function hG(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;e=xh(0,0)|0;c[b>>2]=e;if(!e)YF(a);else ZF(a,b);l=d;return}function iG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=uh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function jG(b){b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;kG(e,b);th((a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e);l=d;return}function kG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0;d=l;l=l+16|0;g=d+4|0;e=d;b=c[b>>2]|0;f=+dc(b|0,c[(lG(d+8|0)|0)>>2]|0,g|0);RF(e,c[g>>2]|0);mG(a,f);TF(e);l=d;return}function lG(a){a=a|0;return pG()|0}function mG(a,b){a=a|0;b=+b;oG(a,nG(b)|0);return}function nG(a){a=+a;return ~~a>>>0|0}function oG(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;e=g;f=c[d>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,d+4|0,f)|0;a[e>>0]=0;Pz(b+f|0,e);l=g;return}function pG(){return 1500}function qG(a){a=a|0;return 1}function rG(){return 34400}function sG(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=tG(c)|0;T9(c);l=b;return a|0}function tG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a[b+11>>0]|0;h=d<<24>>24<0;if(h){f=c[b+4>>2]|0;g=D7(f+4|0)|0;d=d&255;e=f}else{e=d&255;g=D7(e+4|0)|0;d=e;f=c[b+4>>2]|0}c[g>>2]=e;Zaa(g+4|0,(h?c[b>>2]|0:b)|0,(h?f:d)|0)|0;return g|0}function uG(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=l;l=l+16|0;d=g;e=sh()|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11)a[b+11>>0]=f;else{i=f+16&-16;h=P9(i)|0;c[b>>2]=h;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f;b=h}Oz(b,e,f)|0;a[d>>0]=0;Pz(b+f|0,d);l=g;return}function vG(b){b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c+1|0;a[d>>0]=a[c>>0]|0;_f(wG(b,d)|0);l=c;return}function wG(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;d=l;l=l+16|0;b=d+4|0;e=d;a=c[a>>2]|0;f=+dc(a|0,c[(xG(d+8|0)|0)>>2]|0,b|0);RF(e,c[b>>2]|0);b=yG(f)|0;TF(e);l=d;return b|0}function xG(a){a=a|0;return BG()|0}function yG(a){a=+a;return AG(zG(a)|0)|0}function zG(a){a=+a;return ~~a>>>0|0}function AG(a){a=a|0;return a|0}function BG(){return 1504}function CG(a){a=a|0;return 2}function DG(a){a=a|0;return JG()|0}function EG(){return 34403}function FG(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=GG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function GG(a){a=a|0;return a|0}function HG(a){a=a|0;ic(c[a>>2]|0);return c[a>>2]|0}function IG(a){a=a|0;fc(c[a>>2]|0);return}function JG(){return 1508}function KG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Bf(b)|0;LG(a,e);l=d;return}function LG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MG(e,b);b=NG()|0;c[a>>2]=pc(b|0,OG(e)|0)|0;l=d;return}function MG(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RG(e,QG(c[b>>2]|0)|0);eG(e);l=d;return}function NG(){return PG()|0}function OG(a){a=a|0;return a|0}function PG(){return 840}function QG(a){a=a|0;return a|0}function RG(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SG(a){a=a|0;return 4}function TG(a){a=a|0;return _G()|0}function UG(){return 34426}function VG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+4|0;f=e;b=WG(b)|0;c=+XG(c);YG(f,d);qe[a&1](g,b,c,f);d=HG(g)|0;IG(g);IG(f);l=e;return d|0}function WG(a){a=a|0;return a|0}function XG(a){a=+a;return +a}function YG(a,b){a=a|0;b=b|0;ZG(a,b);return}function ZG(a,b){a=a|0;b=b|0;fG(a,b);return}function _G(){return 1516}function $G(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;g=e+8|0;f=e;Ej(g,b,c);aH(f,d);bH(a,g,f);IG(f);l=e;return}function aH(a,b){a=a|0;b=b|0;b=c[b>>2]|0;c[a>>2]=b;ic(b|0);return}function bH(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);dH(a,c);return}function cH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;a=c[a>>2]|0;eH(f,b);b=c[f>>2]|0;fH(g,d);oc(a|0,b|0,c[g>>2]|0);IG(g);IG(f);l=e;return}function dH(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[b>>2]=0;return}function eH(a,b){a=a|0;b=b|0;c[a>>2]=kc(b|0)|0;return}function fH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;gH(e,b);b=hH()|0;c[a>>2]=pc(b|0,iH(e)|0)|0;l=d;return}function gH(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function hH(){return jH()|0}function iH(a){a=a|0;return a|0}function jH(){return 944}function kH(a){a=a|0;return +(+g[a>>2])}function lH(a,b){a=a|0;b=+b;g[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function mH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Cj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function nH(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Bj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function oH(a){a=a|0;return 2}function pH(a){a=a|0;return sH()|0}function qH(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;YG(d,b);b=rH(Cd[a&63](d)|0)|0;IG(d);l=c;return b|0}function rH(a){a=a|0;return a|0}function sH(){return 1532}function tH(a){a=a|0;var b=0,c=0;c=l;l=l+16|0;b=c;if(OF(a)|0)a=Oh(0)|0;else{uH(b,a);a=Oh(b)|0}l=c;return a|0}function uH(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0;c=l;l=l+16|0;f=c;vH(f,b,34432);e=+wH(f);IG(f);vH(f,b,34434);d=+wH(f);IG(f);df(a,e,d);l=c;return}function vH(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;eH(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function wH(a){a=a|0;var b=0.0,d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;a=c[a>>2]|0;b=+dc(a|0,c[(xH(d+8|0)|0)>>2]|0,f|0);RF(e,c[f>>2]|0);b=+yH(b);TF(e);l=d;return +b}function xH(a){a=a|0;return AH()|0}function yH(a){a=+a;return +(+XG(+zH(a)))}function zH(a){a=+a;return +a}function AH(){return 1540}function BH(a){a=a|0;return 4}function CH(a){a=a|0;return GH()|0}function DH(){return 34436}function EH(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);IG(f);l=e;return d|0}function FH(a){a=a|0;return a|0}function GH(){return 1544}function HH(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);c=hh(f,e,c)|0;l=d;return c|0}function IH(a){a=a|0;return 3}function JH(a){a=a|0;return MH()|0}function KH(){return 34442}function LH(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);return rH(Dd[a&1](b,c)|0)|0}function MH(){return 1560}function NH(a){a=a|0;return 4}function OH(a){a=a|0;return SH()|0}function PH(){return 34447}function QH(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0;f=l;l=l+16|0;g=f;b=WG(b)|0;d=+XG(d);e=+XG(e);c[g>>2]=Ed[a&3](b,d,e)|0;b=RH(g)|0;l=f;return b|0}function RH(a){a=a|0;return c[a>>2]|0}function SH(){return 1572}function TH(a){a=a|0;return 3}function UH(a){a=a|0;return XH()|0}function VH(){return 34453}function WH(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=FH(c)|0;return rH(Gd[a&63](b,c)|0)|0}function XH(){return 1588}function YH(a){a=a|0;return 2}function ZH(a){a=a|0;return $H()|0}function _H(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;c[e>>2]=Cd[a&63](b)|0;b=RH(e)|0;l=d;return b|0}function $H(){return 1600}function aI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Xf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function bI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;jI(e,b);b=kI()|0;c[a>>2]=pc(b|0,lI(e)|0)|0;l=d;return}function cI(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;dI(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;eI(e,b);b=fI()|0;c[a>>2]=pc(b|0,gI(e)|0)|0;l=d;return}function eI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function fI(){return hI()|0}function gI(a){a=a|0;return a|0}function hI(){return 912}function iI(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function jI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;lH(e,+kH(b));eG(e);l=d;return}function kI(){return mI()|0}function lI(a){a=a|0;return a|0}function mI(){return 944}function nI(a){a=a|0;return 7}function oI(a){a=a|0;return rI()|0}function pI(){return 34458}function qI(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+16|0;i=h+8|0;j=h+4|0;k=h;b=+XG(b);c=+XG(c);d=+XG(d);YG(i,e);YG(j,f);YG(k,g);he[a&3](b,c,d,i,j,k);IG(k);IG(j);IG(i);l=h;return}function rI(){return 1608}function sI(a,b,d,e,f,g){a=+a;b=+b;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;n=h+16|0;m=h+12|0;k=h+8|0;j=h+4|0;i=h;Vf(a,b,d,n,m,k);c[j>>2]=0;bI(i,n);cI(e,j,i);IG(i);c[j>>2]=0;bI(i,m);cI(f,j,i);IG(i);c[j>>2]=0;bI(i,k);cI(g,j,i);IG(i);l=h;return}function tI(a){a=a|0;return 2}function uI(a){a=a|0;return yI()|0}function vI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=wI(b)|0;c[e>>2]=Cd[a&63](b)|0;b=xI(e)|0;l=d;return b|0}function wI(a){a=a|0;return a|0}function xI(a){a=a|0;return c[a>>2]|0}function yI(){return 1636}function zI(a){a=a|0;return 3}function AI(a){a=a|0;return CI()|0}function BI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;b=GG(b)|0;YG(e,c);ue[a&63](f,b,e);c=HG(f)|0;IG(f);IG(e);l=d;return c|0}function CI(){return 1644}function DI(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;f=d+8|0;e=d;Nf(f,b);aH(e,c);EI(a,f,e);IG(e);l=d;return}function EI(a,b,c){a=a|0;b=b|0;c=c|0;cH(c,34432,b);cH(c,34434,b+4|0);cH(c,34475,b+8|0);cH(c,34477,b+12|0);dH(a,c);return}function FI(a){a=a|0;return 4}function GI(a){a=a|0;return JI()|0}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=GG(b)|0;c=II(c)|0;d=WG(d)|0;return rH(Od[a&63](b,c,d)|0)|0}function II(a){a=a|0;return a|0}function JI(){return 1656}function KI(a){a=a|0;return 5}function LI(a){a=a|0;return OI()|0}function MI(){return 34487}function NI(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;b=WG(b)|0;c=+XG(c);YG(g,d);YG(h,e);ne[a&3](b,c,g,h);IG(h);IG(g);l=f;return}function OI(){return 1672}function PI(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+12|0;i=f+8|0;h=f+4|0;g=f;c[j>>2]=-1;c[i>>2]=-1;yg(a,b,j,i);c[h>>2]=0;QI(g,j);cI(d,h,g);IG(g);c[h>>2]=0;QI(g,i);cI(e,h,g);IG(g);l=f;return}function QI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;RI(e,b);b=SI()|0;c[a>>2]=pc(b|0,TI(e)|0)|0;l=d;return}function RI(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;iI(e,RH(b)|0);eG(e);l=d;return}function SI(){return UI()|0}function TI(a){a=a|0;return a|0}function UI(){return 912}function VI(a){a=a|0;return 6}function WI(a){a=a|0;return ZI()|0}function XI(){return 34494}function YI(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+32|0;k=g+20|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);d=FH(d)|0;e=+XG(e);YG(j,f);Ce[a&3](k,h,i,d,e,j);f=HG(k)|0;IG(k);IG(j);IG(i);T9(h);l=g;return f|0}function ZI(){return 1692}function _I(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,i=0,j=0;j=l;l=l+16|0;h=j+8|0;i=j;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;cj(h,d,0,e,f);aH(i,g);bH(b,h,i);IG(i);l=j;return}function $I(a){a=a|0;return 5}function aJ(a){a=a|0;return dJ()|0}function bJ(){return 34502}function cJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;i=f+8|0;g=f+4|0;h=f;YG(g,b);c=FH(c)|0;d=+XG(d);YG(h,e);we[a&1](i,g,c,d,h);e=HG(i)|0;IG(i);IG(h);IG(g);l=f;return e|0}function dJ(){return 1716}function eJ(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;h=f+16|0;i=f+8|0;g=f;uH(i,b);Tj(h,i,c,d);aH(g,e);bH(a,h,g);IG(g);l=f;return}function fJ(a){a=a|0;return 2}function gJ(a){a=a|0;return iJ()|0}function hJ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=tG(d)|0;T9(d);l=c;return b|0}function iJ(){return 1736}function jJ(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;g=h;e=pm(d)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Nz(e)|0;if(f>>>0>4294967279)R9(b);if(f>>>0<11){a[b+11>>0]=f;d=b}else{i=f+16&-16;d=P9(i)|0;c[b>>2]=d;c[b+8>>2]=i|-2147483648;c[b+4>>2]=f}Oz(d,e,f)|0;a[g>>0]=0;Pz(d+f|0,g);l=h;return}function kJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Fh()|0;lJ(a,d);l=b;return}function lJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;mJ(e,b);b=nJ()|0;c[a>>2]=pc(b|0,oJ(e)|0)|0;l=d;return}function mJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;rJ(e,qJ(c[b>>2]|0)|0);eG(e);l=d;return}function nJ(){return pJ()|0}function oJ(a){a=a|0;return a|0}function pJ(){return 88}function qJ(a){a=a|0;return a|0}function rJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function sJ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Eh()|0;tJ(a,d);l=b;return}function tJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;uJ(e,b);b=vJ()|0;c[a>>2]=pc(b|0,wJ(e)|0)|0;l=d;return}function uJ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;zJ(e,yJ(c[b>>2]|0)|0);eG(e);l=d;return}function vJ(){return xJ()|0}function wJ(a){a=a|0;return a|0}function xJ(){return 112}function yJ(a){a=a|0;return a|0}function zJ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function AJ(a){a=a|0;return 3}function BJ(a){a=a|0;return DJ()|0}function CJ(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;YG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);IG(e);l=d;return c|0}function DJ(){return 1744}function EJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=l;l=l+16|0;c=e+8|0;d=e;if(FJ(b)|0){uH(c,a);a=Pq(c)|0}else{uH(c,a);uH(d,b);a=Qq(c,d)|0}l=e;return a|0}function FJ(a){a=a|0;return (c[a>>2]|0)==1|0}function GJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Sj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function HJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Rj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function IJ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Qj(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function JJ(a){a=a|0;return 2}function KJ(a){a=a|0;return MJ()|0}function LJ(a,b){a=a|0;b=b|0;b=WG(b)|0;return rH(Cd[a&63](b)|0)|0}function MJ(){return 1756}function NJ(a){a=a|0;Fu(a);return}function OJ(a){a=a|0;Eu(a);return}function PJ(a){a=a|0;return 2}function QJ(a){a=a|0;return UJ()|0}function RJ(){return 34583}function SJ(a,b){a=a|0;b=b|0;b=TJ(b)|0;je[a&127](b);return}function TJ(a){a=a|0;return a|0}function UJ(){return 1764}function VJ(a){a=a|0;Du(a);return}function WJ(a){a=a|0;return 4}function XJ(a){a=a|0;return _J()|0}function YJ(){return 34614}function ZJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;YG(f,b);YG(g,c);d=FH(d)|0;ue[a&63](f,g,d);IG(g);IG(f);l=e;return}function _J(){return 1772}function $J(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+8|0;e=d;uH(f,a);uH(e,b);Hi(f,e,c);l=d;return}function aK(a){a=a|0;return 3}function bK(a){a=a|0;return dK()|0}function cK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+12|0;e=d;oG(e,b);c=WG(c)|0;ue[a&63](f,e,c);c=HG(f)|0;IG(f);T9(e);l=d;return c|0}function dK(){return 1788}function eK(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=34630;O9(34620,d)|0;YF(a);l=b;return}function fK(a){a=a|0;return 5}function gK(a){a=a|0;return jK()|0}function hK(){return 34778}function iK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=GG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function jK(){return 1800}function kK(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=34785;O9(34620,b)|0;l=a;return}function lK(a){a=a|0;return 3}function mK(a){a=a|0;return oK()|0}function nK(a,b,c){a=a|0;b=b|0;c=c|0;b=WG(b)|0;c=WG(c)|0;return rH(Gd[a&63](b,c)|0)|0}function oK(){return 1820}function pK(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;Zi(34949,d);l=e;return}function qK(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if(OF(d)|0)In(b,0);else{kG(e,d);In(b,(a[e+11>>0]|0)<0?c[e>>2]|0:e);T9(e)}l=f;return}function rK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return nk(b)|0}function sK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return uk(b,d)|0}function tK(a){a=a|0;return 4}function uK(a){a=a|0;return wK()|0}function vK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=WG(c)|0;d=FH(d)|0;d=rH(Od[a&63](f,c,d)|0)|0;T9(f);l=e;return d|0}function wK(){return 1832}function xK(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return sk(b,d,e)|0}function yK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return rk(b,d)|0}function zK(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=ok(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h);l=i;return j|0}function AK(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=c[b>>2]|0;dI(f,d);fG(a,hc(b|0,c[f>>2]|0)|0);IG(f);l=e;return}function BK(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(IK(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=JK(e)|0;TF(d);l=b;return a|0}function CK(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;DK(e,b);b=EK()|0;c[a>>2]=pc(b|0,FK(e)|0)|0;l=d;return}function DK(b,d){b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;HK(f,rH((a[d>>0]|0)!=0)|0);eG(f);l=e;return}function EK(){return GK()|0}function FK(a){a=a|0;return a|0}function GK(){return 864}function HK(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b&1;c[a>>2]=(c[a>>2]|0)+8;return}function IK(a){a=a|0;return LK()|0}function JK(a){a=+a;return FH(KK(a)|0)|0}function KK(a){a=+a;return a!=0.0|0}function LK(){return 1848}function MK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mk(b)|0}function NK(a){a=a|0;return 3}function OK(a){a=a|0;return QK()|0}function PK(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=WG(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function QK(){return 1852}function RK(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return qk(b,d)|0}function SK(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;ek(b);return}function TK(a){a=a|0;return 5}function UK(a){a=a|0;return WK()|0}function VK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+16|0;h=f+4|0;i=f;oG(g,b);oG(h,c);YG(i,d);e=FH(e)|0;e=rH(Xd[a&31](g,h,i,e)|0)|0;IG(i);T9(h);T9(g);l=f;return e|0}function WK(){return 1864}function XK(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;j=l;l=l+16|0;g=j+8|0;h=j+4|0;i=j;c[i>>2]=0;AK(h,e,i);k=BK(h)|0;IG(h);a[g>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;k=gq(b,d,g,f)|0;c[h>>2]=0;CK(i,g);cI(e,h,i);IG(i);l=j;return k|0}function YK(a){a=a|0;return 3}function ZK(a){a=a|0;return $K()|0}function _K(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;oG(e,b);c=FH(c)|0;c=rH(Gd[a&63](e,c)|0)|0;T9(e);l=d;return c|0}function $K(){return 1884}function aL(b,d){b=b|0;d=d|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return mq(b,d)|0}function bL(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;$j(34949,d);l=e;return}function cL(a){a=a|0;return 3}function dL(a){a=a|0;return gL()|0}function eL(){return 34952}function fL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);oe[a&127](e,f);IG(f);T9(e);l=d;return}function gL(){return 1896}function hL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;h=i;g=i+8|0;e=i+4|0;iL(g,d);eH(e,34957);f=jL(g,e)|0;IG(e);IG(g);do if(!f){iL(g,d);eH(e,34965);f=jL(g,e)|0;IG(e);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(f){mr(b,+wH(d),0);break}else{kG(g,d);c[h>>2]=(a[g+11>>0]|0)<0?c[g>>2]|0:g;yn(b,34949,h);T9(g);break}}else{if((a[b+11>>0]|0)<0)b=c[b>>2]|0;lr(b,BK(d)|0)}while(0);l=i;return}function iL(a,b){a=a|0;b=b|0;fG(a,qc(c[b>>2]|0)|0);return}function jL(a,b){a=a|0;b=b|0;return gc(c[a>>2]|0,c[b>>2]|0)|0}function kL(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=$p(b,e)|0;l=f;return e|0}function lL(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42560]|0)==0?Haa(42560)|0:0)aH(57940,e);if((a[42568]|0)==0?Haa(42568)|0:0)c[14486]=f;if((a[42576]|0)==0?Haa(42576)|0:0){c[14487]=0;c[14488]=0;c[14489]=0}c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=cq(b,h,oL(34)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function mL(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(qL(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=rL(e)|0;TF(d);l=b;return a|0}function nL(a,b,c){a=a|0;b=b|0;c=c|0;return pL(b,c)|0}function oL(a){a=a|0;return a|0}function pL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+32|0;e=i+20|0;f=i+16|0;g=i+4|0;h=i;c[f>>2]=b;if((b|0)<0|(c[14486]|0)<(b|0))b=0;else{AK(h,57940,f);kG(g,h);if((a[57959]|0)<0){f=c[14487]|0;a[e>>0]=0;Pz(f,e);c[14488]=0}else{a[e>>0]=0;Pz(57948,e);a[57959]=0}U9(57948,0);c[14487]=c[g>>2];c[14488]=c[g+4>>2];c[14489]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;T9(g);IG(h);c[d>>2]=(a[57959]|0)<0?c[14487]|0:57948;b=1}l=i;return b|0}function qL(a){a=a|0;return tL()|0}function rL(a){a=+a;return WG(sL(a)|0)|0}function sL(a){a=+a;return ~~a|0}function tL(){return 1908}function uL(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;j=l;l=l+32|0;i=j+16|0;g=j+8|0;h=j;iL(i,d);eH(g,34957);k=jL(i,g)|0;IG(g);IG(i);if(k){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;k=BK(d)|0;uH(i,f);b=Yp(b,k,e,i)|0}else{c[h>>2]=0;AK(g,d,h);k=BK(g)|0;IG(g);a[i>>0]=k&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(g,f);b=_p(b,i,e,g)|0;c[g>>2]=0;CK(h,i);cI(d,g,h);IG(h)}l=j;return b|0}function vL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(OF(d)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Sn(b,e)|0}else{c[h>>2]=0;AK(g,d,h);j=BK(g)|0;IG(g);a[f>>0]=j&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=Tn(b,f,e)|0;c[g>>2]=0;CK(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function wL(b){b=b|0;var d=0,e=0,f=0,g=0;e=l;l=l+16|0;d=e+4|0;g=e;iL(d,b);eH(g,34972);f=jL(d,g)|0;IG(g);IG(d);if(f){kG(d,b);ir((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}else jr(mL(b)|0);l=e;return}function xL(a){a=a|0;return 4}function yL(a){a=a|0;return AL()|0}function zL(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+12|0;g=e;YG(f,b);c=WG(c)|0;oG(g,d);d=rH(Od[a&63](f,c,g)|0)|0;T9(g);IG(f);l=e;return d|0}function AL(){return 1912}function BL(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;i=l;l=l+32|0;h=i+8|0;g=i;f=i+16|0;k=i+12|0;iL(f,b);eH(k,34972);j=jL(f,k)|0;IG(k);IG(f);if(j){kG(f,b);b=(a[f+11>>0]|0)<0?c[f>>2]|0:f;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;e=Yn(b,d,34949,g)|0;T9(f)}else{b=mL(b)|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=e;e=Zn(b,d,34949,h)|0}l=i;return e|0}function CL(a){a=a|0;return 3}function DL(a){a=a|0;return FL()|0}function EL(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);c=rH(Gd[a&63](e,f)|0)|0;T9(f);IG(e);l=d;return c|0}function FL(){return 1928}function GL(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=l;l=l+32|0;g=h+8|0;f=h;e=h+16|0;j=h+12|0;iL(e,b);eH(j,34972);i=jL(e,j)|0;IG(j);IG(e);if(i){kG(e,b);b=(a[e+11>>0]|0)<0?c[e>>2]|0:e;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;d=_n(b,34949,f)|0;T9(e)}else{b=mL(b)|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[g>>2]=d;d=$n(b,34949,g)|0}l=h;return d|0}function HL(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;j=l;l=l+32|0;g=j+24|0;h=j+8|0;i=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;IL(h,d);uH(i,f);c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];i=rq(b,h,e,g)|0;l=j;return i|0}function IL(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,g=0.0,h=0;c=l;l=l+16|0;h=c;vH(h,b,34432);g=+wH(h);IG(h);vH(h,b,34434);f=+wH(h);IG(h);vH(h,b,34475);e=+wH(h);IG(h);vH(h,b,34477);d=+wH(h);IG(h);Of(a,g,f,e,d);l=c;return}function JL(a){a=a|0;return 5}function KL(a){a=a|0;return ML()|0}function LL(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+32|0;g=f+8|0;h=f+4|0;i=f;oG(g,b);YG(h,c);d=WG(d)|0;YG(i,e);e=rH(Xd[a&31](g,h,d,i)|0)|0;IG(i);IG(h);T9(g);l=f;return e|0}function ML(){return 1940}function NL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Cq(b,i,e,0)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function OL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=Gq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function PL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+32|0;i=n+8|0;j=n+4|0;k=n;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);IG(j);c[k>>2]=1;AK(j,d,k);m=i+4|0;g[m>>2]=+wH(j);IG(j);c[k>>2]=2;AK(j,d,k);f=i+8|0;g[f>>2]=+wH(j);IG(j);c[k>>2]=3;AK(j,d,k);h=i+12|0;g[h>>2]=+wH(j);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=zq(b,i,e)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,m);cI(d,j,k);IG(k);c[j>>2]=2;bI(k,f);cI(d,j,k);IG(k);c[j>>2]=3;bI(k,h);cI(d,j,k);IG(k);l=n;return e|0}function QL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;h=m+8|0;i=m+4|0;j=m;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[j>>2]=0;AK(i,d,j);g[h>>2]=+wH(i);IG(i);c[j>>2]=1;AK(i,d,j);k=h+4|0;g[k>>2]=+wH(i);IG(i);c[j>>2]=2;AK(i,d,j);f=h+8|0;g[f>>2]=+wH(i);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;e=yq(b,h,e)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;bI(j,k);cI(d,i,j);IG(j);c[i>>2]=2;bI(j,f);cI(d,i,j);IG(j);l=m;return e|0}function RL(a){a=a|0;return 7}function SL(a){a=a|0;return VL()|0}function TL(){return 34979}function UL(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h;oG(i,b);YG(j,c);YG(k,d);e=WG(e)|0;f=WG(f)|0;oG(m,g);g=rH(be[a&7](i,j,k,e,f,m)|0)|0;T9(m);IG(k);IG(j);T9(i);l=h;return g|0}function VL(){return 1960}function WL(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+32|0;i=m+16|0;j=m+8|0;k=m;c[k>>2]=0;AK(j,e,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(j,d);if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=Ao(b,j,i,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(e,j,k);IG(k);l=m;return n|0}function XL(a){a=a|0;return 8}function YL(a){a=a|0;return $L()|0}function ZL(){return 34988}function _L(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0,n=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i;oG(j,b);YG(k,c);YG(m,d);e=+XG(e);f=+XG(f);oG(n,g);h=+XG(h);g=rH(Td[a&3](j,k,m,e,f,n,h)|0)|0;T9(n);IG(m);IG(k);T9(j);l=i;return g|0}function $L(){return 1988}function aM(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+32|0;k=o+16|0;m=o+8|0;n=o;c[n>>2]=0;AK(m,e,n);p=+wH(m);IG(m);g[k>>2]=p;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(m,d);if((a[i+11>>0]|0)<0)i=c[i>>2]|0;d=yo(b,m,k,f,h,i,j)|0;c[m>>2]=0;bI(n,k);cI(e,m,n);IG(n);l=o;return d|0}function bM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;h=k+4|0;c[i>>2]=1;AK(p,d,i);c[h>>2]=mL(p)|0;i=k+8|0;c[j>>2]=2;AK(q,d,j);c[i>>2]=mL(q)|0;j=k+12|0;c[s>>2]=3;AK(r,d,s);c[j>>2]=mL(r)|0;IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;s=Ko(b,k,e,f,g)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;QI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function cM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;h=j+4|0;c[i>>2]=1;AK(o,d,i);c[h>>2]=mL(o)|0;i=j+8|0;c[q>>2]=2;AK(p,d,q);c[i>>2]=mL(p)|0;IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;q=Jo(b,j,e,f,g)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;QI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function dM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;h=i+4|0;c[o>>2]=1;AK(n,d,o);c[h>>2]=mL(n)|0;IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;o=Io(b,i,e,f,g)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function eM(a){a=a|0;return 6}function fM(a){a=a|0;return iM()|0}function gM(){return 34998}function hM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;oG(j,f);f=rH(ae[a&15](h,i,d,e,j)|0)|0;T9(j);IG(i);T9(h);l=g;return f|0}function iM(){return 2020}function jM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;m=On(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function kM(a){a=a|0;return 5}function lM(a){a=a|0;return oM()|0}function mM(){return 35006}function nM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=+XG(d);e=+XG(e);c=rH(Id[a&3](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return c|0}function oM(){return 2044}function pM(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var h=0,i=0,j=0,k=0,m=0.0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=+wH(i);IG(i);g[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=zo(b,h,e,f)|0;c[i>>2]=0;bI(j,h);cI(d,i,j);IG(j);l=k;return b|0}function qM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=l;l=l+48|0;n=q+32|0;o=q+28|0;p=q+24|0;r=q+20|0;k=q+16|0;s=q+12|0;m=q+8|0;t=q+4|0;u=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);j=n+4|0;c[k>>2]=1;AK(r,d,k);g[j>>2]=+wH(r);k=n+8|0;c[m>>2]=2;AK(s,d,m);g[k>>2]=+wH(s);m=n+12|0;c[u>>2]=3;AK(t,d,u);g[m>>2]=+wH(t);IG(t);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;u=Go(b,n,e,f,h,i)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,j);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=3;bI(p,m);cI(d,o,p);IG(p);l=q;return u|0}function rM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;p=l;l=l+48|0;m=p+24|0;n=p+20|0;o=p+16|0;q=p+12|0;k=p+8|0;r=p+4|0;s=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);j=m+4|0;c[k>>2]=1;AK(q,d,k);g[j>>2]=+wH(q);k=m+8|0;c[s>>2]=2;AK(r,d,s);g[k>>2]=+wH(r);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;s=Fo(b,m,e,f,h,i)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,j);cI(d,n,o);IG(o);c[n>>2]=2;bI(o,k);cI(d,n,o);IG(o);l=p;return s|0}function sM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0,p=0,q=0;o=l;l=l+32|0;k=o+16|0;m=o+12|0;n=o+8|0;p=o+4|0;q=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);j=k+4|0;c[q>>2]=1;AK(p,d,q);g[j>>2]=+wH(p);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;q=Eo(b,k,e,f,h,i)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,j);cI(d,m,n);IG(n);l=o;return q|0}function tM(a){a=a|0;return 7}function uM(a){a=a|0;return xM()|0}function vM(){return 35013}function wM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);oG(k,f);g=+XG(g);f=rH(Kd[a&7](i,j,d,e,k,g)|0)|0;T9(k);IG(j);T9(i);l=h;return f|0}function xM(){return 2064}function yM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=+i;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;h=xo(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return h|0}function zM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;m=l;l=l+48|0;i=m+32|0;j=m+28|0;k=m+24|0;n=m+20|0;g=m+16|0;o=m+12|0;h=m+8|0;p=m+4|0;q=m;c[k>>2]=0;AK(j,d,k);c[i>>2]=mL(j)|0;f=i+4|0;c[g>>2]=1;AK(n,d,g);c[f>>2]=mL(n)|0;g=i+8|0;c[h>>2]=2;AK(o,d,h);c[g>>2]=mL(o)|0;h=i+12|0;c[q>>2]=3;AK(p,d,q);c[h>>2]=mL(p)|0;IG(p);IG(o);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Qp(b,i,e)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;QI(k,f);cI(d,j,k);IG(k);c[j>>2]=2;QI(k,g);cI(d,j,k);IG(k);c[j>>2]=3;QI(k,h);cI(d,j,k);IG(k);l=m;return q|0}function AM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;k=l;l=l+48|0;h=k+24|0;i=k+20|0;j=k+16|0;m=k+12|0;g=k+8|0;n=k+4|0;o=k;c[j>>2]=0;AK(i,d,j);c[h>>2]=mL(i)|0;f=h+4|0;c[g>>2]=1;AK(m,d,g);c[f>>2]=mL(m)|0;g=h+8|0;c[o>>2]=2;AK(n,d,o);c[g>>2]=mL(n)|0;IG(n);IG(m);IG(i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Pp(b,h,e)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);c[i>>2]=1;QI(j,f);cI(d,i,j);IG(j);c[i>>2]=2;QI(j,g);cI(d,i,j);IG(j);l=k;return o|0}function BM(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;j=l;l=l+32|0;f=j+16|0;g=j+12|0;h=j+8|0;k=j+4|0;m=j;c[h>>2]=0;AK(g,d,h);c[f>>2]=mL(g)|0;i=f+4|0;c[m>>2]=1;AK(k,d,m);c[i>>2]=mL(k)|0;IG(k);IG(g);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Op(b,f,e)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h);c[g>>2]=1;QI(h,i);cI(d,g,h);IG(h);l=j;return m|0}function CM(a){a=a|0;return 6}function DM(a){a=a|0;return FM()|0}function EM(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g+4|0;i=g;oG(h,b);YG(i,c);d=WG(d)|0;e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,d,e,f)|0)|0;IG(i);T9(h);l=g;return f|0}function FM(){return 2092}function GM(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;c[j>>2]=0;AK(i,d,j);m=mL(i)|0;IG(i);c[h>>2]=m;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;m=Ip(b,h,e,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return m|0}function HM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;o=l;l=l+48|0;k=o+32|0;m=o+28|0;n=o+24|0;p=o+20|0;i=o+16|0;q=o+12|0;j=o+8|0;r=o+4|0;s=o;c[n>>2]=0;AK(m,d,n);g[k>>2]=+wH(m);h=k+4|0;c[i>>2]=1;AK(p,d,i);g[h>>2]=+wH(p);i=k+8|0;c[j>>2]=2;AK(q,d,j);g[i>>2]=+wH(q);j=k+12|0;c[s>>2]=3;AK(r,d,s);g[j>>2]=+wH(r);IG(r);IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;s=Mp(b,k,e,f)|0;c[m>>2]=0;bI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;bI(n,h);cI(d,m,n);IG(n);c[m>>2]=2;bI(n,i);cI(d,m,n);IG(n);c[m>>2]=3;bI(n,j);cI(d,m,n);IG(n);l=o;return s|0}function IM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;n=l;l=l+48|0;j=n+24|0;k=n+20|0;m=n+16|0;o=n+12|0;i=n+8|0;p=n+4|0;q=n;c[m>>2]=0;AK(k,d,m);g[j>>2]=+wH(k);h=j+4|0;c[i>>2]=1;AK(o,d,i);g[h>>2]=+wH(o);i=j+8|0;c[q>>2]=2;AK(p,d,q);g[i>>2]=+wH(p);IG(p);IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;q=Lp(b,j,e,f)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;bI(m,h);cI(d,k,m);IG(m);c[k>>2]=2;bI(m,i);cI(d,k,m);IG(m);l=n;return q|0}function JM(a){a=a|0;return 5}function KM(a){a=a|0;return MM()|0}function LM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+4|0;h=f;oG(g,b);YG(h,c);d=WG(d)|0;e=WG(e)|0;e=rH(Xd[a&31](g,h,d,e)|0)|0;IG(h);T9(g);l=f;return e|0}function MM(){return 2116}function NM(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;m=l;l=l+32|0;i=m+16|0;j=m+12|0;k=m+8|0;n=m+4|0;o=m;c[k>>2]=0;AK(j,d,k);g[i>>2]=+wH(j);h=i+4|0;c[o>>2]=1;AK(n,d,o);g[h>>2]=+wH(n);IG(n);IG(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;o=Kp(b,i,e,f)|0;c[j>>2]=0;bI(k,i);cI(d,j,k);IG(k);c[j>>2]=1;bI(k,h);cI(d,j,k);IG(k);l=m;return o|0}function OM(a){a=a|0;return 7}function PM(a){a=a|0;return SM()|0}function QM(){return 35022}function RM(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;var h=0,i=0,j=0;h=l;l=l+16|0;i=h+4|0;j=h;oG(i,b);YG(j,c);d=+XG(d);e=+XG(e);f=WG(f)|0;g=WG(g)|0;g=rH(Ld[a&1](i,j,d,e,f,g)|0)|0;IG(j);T9(i);l=h;return g|0}function SM(){return 2136}function TM(b,d,e,f,h,i){b=b|0;d=d|0;e=+e;f=+f;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+16|0;j=n+8|0;k=n+4|0;m=n;c[m>>2]=0;AK(k,d,m);o=+wH(k);IG(k);g[j>>2]=o;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=Hp(b,j,e,f,h,i)|0;c[k>>2]=0;bI(m,j);cI(d,k,m);IG(m);l=n;return i|0}function UM(a){a=a|0;return 8}function VM(a){a=a|0;return YM()|0}function WM(){return 35031}function XM(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i+8|0;n=i+4|0;o=i;oG(j,b);YG(k,c);d=GG(d)|0;YG(m,e);f=WG(f)|0;YG(n,g);YG(o,h);h=rH(ce[a&7](j,k,d,m,f,n,o)|0)|0;IG(o);IG(n);IG(m);IG(k);T9(j);l=i;return h|0}function YM(){return 2164}function ZM(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0;n=l;l=l+32|0;j=n+16|0;k=n+8|0;m=n;c[m>>2]=0;AK(k,d,m);kG(j,k);IG(k);U9(j,e);if(OF(h)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,0,0)|0;i=j}else{if((a[42584]|0)==0?Haa(42584)|0:0)aH(57960,h);if((a[42592]|0)==0?Haa(42592)|0:0)aH(57964,i);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;h=j+11|0;o=a[h>>0]|0;i=c[j>>2]|0;uH(k,f);b=Dp(b,o<<24>>24<0?i:j,e,k,g,$M(24)|0,0)|0;i=j}c[k>>2]=0;eH(m,(a[h>>0]|0)<0?c[i>>2]|0:j);cI(d,k,m);IG(m);T9(j);l=n;return b|0}function _M(a){a=a|0;return aN(a)|0}function $M(a){a=a|0;return a|0}function aN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57964);dN(e,57960,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function bN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;lN(e,b);b=mN()|0;c[a>>2]=pc(b|0,nN(e)|0)|0;l=d;return}function cN(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;a=c[a>>2]|0;eH(f,b);oc(a|0,c[f>>2]|0,c[d>>2]|0);IG(f);l=e;return}function dN(a,b,c){a=a|0;b=b|0;c=c|0;eN(a,b,17,c);return}function eN(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;j=f+8|0;i=f;fN(i,e);h=c[b>>2]|0;g=gN(j)|0;b=hN(j)|0;e=iN(i)|0;fG(a,Xd[d&31](h,g,b,e)|0);l=f;return}function fN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;kN(e,HG(b)|0);eG(e);l=d;return}function gN(a){a=a|0;return 1}function hN(a){a=a|0;return jN()|0}function iN(a){a=a|0;return a|0}function jN(){return 2196}function kN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function lN(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;qN(e,pN(c[b>>2]|0)|0);eG(e);l=d;return}function mN(){return oN()|0}function nN(a){a=a|0;return a|0}function oN(){return 160}function pN(a){a=a|0;return a|0}function qN(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function rN(a){a=a|0;return 7}function sN(a){a=a|0;return uN()|0}function tN(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;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h;oG(i,b);YG(j,c);d=GG(d)|0;e=WG(e)|0;YG(k,f);YG(m,g);g=rH(be[a&7](i,j,d,e,k,m)|0)|0;IG(m);IG(k);IG(j);T9(i);l=h;return g|0}function uN(){return 2200}function vN(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0;m=l;l=l+32|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);kG(i,j);IG(j);U9(i,e);if(OF(g)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;b=lg(b,(a[g>>0]|0)<0?c[i>>2]|0:i,e,f,0,0)|0;h=i}else{if((a[42600]|0)==0?Haa(42600)|0:0)aH(57968,g);if((a[42608]|0)==0?Haa(42608)|0:0)aH(57972,h);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=i+11|0;h=(a[g>>0]|0)<0?c[i>>2]|0:i;b=lg(b,h,e,f,$M(25)|0,0)|0;h=i}c[j>>2]=0;eH(k,(a[g>>0]|0)<0?c[h>>2]|0:i);cI(d,j,k);IG(k);T9(i);l=m;return b|0}function wN(a){a=a|0;return xN(a)|0}function xN(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;f=b+4|0;d=b+8|0;e=b;c[f>>2]=a;bN(d,f);cN(d,35041,57972);dN(e,57968,d);a=mL(e)|0;IG(e);IG(d);l=b;return a|0}function yN(a){a=a|0;return 9}function zN(a){a=a|0;return CN()|0}function AN(){return 35107}function BN(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+48|0;k=j+24|0;m=j+20|0;n=j+16|0;o=j+4|0;p=j;oG(k,b);YG(m,c);YG(n,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(o,h);YG(p,i);i=rH(Rd[a&1](k,m,n,e,f,g,o,p)|0)|0;IG(p);T9(o);IG(n);IG(m);T9(k);l=j;return i|0}function CN(){return 2228}function DN(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;p=r+24|0;q=r+20|0;m=r+16|0;n=r+4|0;o=r;c[m>>2]=0;AK(p,d,m);k=mL(p)|0;IG(p);c[q>>2]=k;c[n>>2]=0;AK(p,e,n);k=mL(p)|0;IG(p);c[m>>2]=k;if(OF(j)|0){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;k=Nz(0)|0;if(k>>>0>4294967279)R9(n);if(k>>>0<11){a[n+11>>0]=k;j=n}else{s=k+16&-16;j=P9(s)|0;c[n>>2]=j;c[n+8>>2]=s|-2147483648;c[n+4>>2]=k}Oz(j,0,k)|0;a[p>>0]=0;Pz(j+k|0,p)}else kG(n,j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;s=Xo(b,q,m,f,~~g,~~h,i,(a[n+11>>0]|0)<0?c[n>>2]|0:n)|0;c[p>>2]=0;QI(o,q);cI(d,p,o);IG(o);c[p>>2]=0;QI(o,m);cI(e,p,o);IG(o);T9(n);l=r;return s|0}function EN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;p=l;l=l+48|0;m=p+32|0;n=p+28|0;o=p+24|0;q=p+20|0;j=p+16|0;r=p+12|0;k=p+8|0;s=p+4|0;t=p;c[o>>2]=0;AK(n,d,o);c[m>>2]=mL(n)|0;i=m+4|0;c[j>>2]=1;AK(q,d,j);c[i>>2]=mL(q)|0;j=m+8|0;c[k>>2]=2;AK(r,d,k);c[j>>2]=mL(r)|0;k=m+12|0;c[t>>2]=3;AK(s,d,t);c[k>>2]=mL(s)|0;IG(s);IG(r);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;t=Wo(b,m,e,f,g,h)|0;c[n>>2]=0;QI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;QI(o,i);cI(d,n,o);IG(o);c[n>>2]=2;QI(o,j);cI(d,n,o);IG(o);c[n>>2]=3;QI(o,k);cI(d,n,o);IG(o);l=p;return t|0}function FN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;o=l;l=l+48|0;k=o+24|0;m=o+20|0;n=o+16|0;p=o+12|0;j=o+8|0;q=o+4|0;r=o;c[n>>2]=0;AK(m,d,n);c[k>>2]=mL(m)|0;i=k+4|0;c[j>>2]=1;AK(p,d,j);c[i>>2]=mL(p)|0;j=k+8|0;c[r>>2]=2;AK(q,d,r);c[j>>2]=mL(q)|0;IG(q);IG(p);IG(m);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;r=Vo(b,k,e,f,g,h)|0;c[m>>2]=0;QI(n,k);cI(d,m,n);IG(n);c[m>>2]=1;QI(n,i);cI(d,m,n);IG(n);c[m>>2]=2;QI(n,j);cI(d,m,n);IG(n);l=o;return r|0}function GN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+32|0;j=n+16|0;k=n+12|0;m=n+8|0;o=n+4|0;p=n;c[m>>2]=0;AK(k,d,m);c[j>>2]=mL(k)|0;i=j+4|0;c[p>>2]=1;AK(o,d,p);c[i>>2]=mL(o)|0;IG(o);IG(k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;p=Uo(b,j,e,f,g,h)|0;c[k>>2]=0;QI(m,j);cI(d,k,m);IG(m);c[k>>2]=1;QI(m,i);cI(d,k,m);IG(m);l=n;return p|0}function HN(a){a=a|0;return 7}function IN(a){a=a|0;return LN()|0}function JN(){return 35118}function KN(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h;oG(i,b);YG(j,c);d=+XG(d);e=WG(e)|0;f=WG(f)|0;oG(k,g);g=rH(Nd[a&7](i,j,d,e,f,k)|0)|0;T9(k);IG(j);T9(i);l=h;return g|0}function LN(){return 2264}function MN(b,d,e,f,g,h){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;m=l;l=l+16|0;i=m+8|0;j=m+4|0;k=m;c[k>>2]=0;AK(j,d,k);n=mL(j)|0;IG(j);c[i>>2]=n;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;n=So(b,i,e,f,g,h)|0;c[j>>2]=0;QI(k,i);cI(d,j,k);IG(k);l=m;return n|0}function NN(a){a=a|0;return 10}function ON(a){a=a|0;return RN()|0}function PN(){return 35127}function QN(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+4|0;q=k;oG(m,b);YG(n,c);YG(o,d);e=+XG(e);f=+XG(f);g=+XG(g);oG(p,h);YG(q,i);j=+XG(j);i=rH(Sd[a&1](m,n,o,e,f,g,p,q,j)|0)|0;IG(q);T9(p);IG(o);IG(n);T9(m);l=k;return i|0}function RN(){return 2292}function SN(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;m=+m;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0;t=l;l=l+32|0;s=t+24|0;o=t+20|0;p=t+16|0;q=t+4|0;r=t;c[p>>2]=0;AK(s,d,p);u=+wH(s);IG(s);g[o>>2]=u;c[q>>2]=0;AK(s,e,q);u=+wH(s);IG(s);g[p>>2]=u;if(OF(k)|0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;n=Nz(0)|0;if(n>>>0>4294967279)R9(q);if(n>>>0<11){a[q+11>>0]=n;k=q}else{v=n+16&-16;k=P9(v)|0;c[q>>2]=k;c[q+8>>2]=v|-2147483648;c[q+4>>2]=n}Oz(k,0,n)|0;a[s>>0]=0;Pz(k+n|0,s)}else kG(q,k);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[j+11>>0]|0)<0)j=c[j>>2]|0;v=Ro(b,o,p,f,h,i,j,(a[q+11>>0]|0)<0?c[q>>2]|0:q,m)|0;c[s>>2]=0;bI(r,o);cI(d,s,r);IG(r);c[s>>2]=0;bI(r,p);cI(e,s,r);IG(r);T9(q);l=t;return v|0}function TN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;r=l;l=l+48|0;o=r+32|0;p=r+28|0;q=r+24|0;s=r+20|0;m=r+16|0;t=r+12|0;n=r+8|0;u=r+4|0;v=r;c[q>>2]=0;AK(p,d,q);g[o>>2]=+wH(p);k=o+4|0;c[m>>2]=1;AK(s,d,m);g[k>>2]=+wH(s);m=o+8|0;c[n>>2]=2;AK(t,d,n);g[m>>2]=+wH(t);n=o+12|0;c[v>>2]=3;AK(u,d,v);g[n>>2]=+wH(u);IG(u);IG(t);IG(s);IG(p);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;v=Qo(b,o,e,f,h,i,j)|0;c[p>>2]=0;bI(q,o);cI(d,p,q);IG(q);c[p>>2]=1;bI(q,k);cI(d,p,q);IG(q);c[p>>2]=2;bI(q,m);cI(d,p,q);IG(q);c[p>>2]=3;bI(q,n);cI(d,p,q);IG(q);l=r;return v|0}function UN(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=l;l=l+48|0;n=q+24|0;o=q+20|0;p=q+16|0;r=q+12|0;m=q+8|0;s=q+4|0;t=q;c[p>>2]=0;AK(o,d,p);g[n>>2]=+wH(o);k=n+4|0;c[m>>2]=1;AK(r,d,m);g[k>>2]=+wH(r);m=n+8|0;c[t>>2]=2;AK(s,d,t);g[m>>2]=+wH(s);IG(s);IG(r);IG(o);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;t=Po(b,n,e,f,h,i,j)|0;c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);c[o>>2]=1;bI(p,k);cI(d,o,p);IG(p);c[o>>2]=2;bI(p,m);cI(d,o,p);IG(p);l=q;return t|0}function VN(a){a=a|0;return 8}function WN(a){a=a|0;return ZN()|0}function XN(){return 35139}function YN(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+16|0;k=i+12|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);oG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;T9(m);IG(k);T9(j);l=i;return g|0}function ZN(){return 2332}function _N(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0;p=l;l=l+32|0;m=p+16|0;n=p+12|0;o=p+8|0;q=p+4|0;r=p;c[o>>2]=0;AK(n,d,o);g[m>>2]=+wH(n);k=m+4|0;c[r>>2]=1;AK(q,d,r);g[k>>2]=+wH(q);IG(q);IG(n);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[i+11>>0]|0)<0)i=c[i>>2]|0;r=Oo(b,m,e,f,h,i,j)|0;c[n>>2]=0;bI(o,m);cI(d,n,o);IG(o);c[n>>2]=1;bI(o,k);cI(d,n,o);IG(o);l=p;return r|0}function $N(a){a=a|0;return 8}function aO(a){a=a|0;return cO()|0}function bO(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;var i=0,j=0,k=0,m=0;i=l;l=l+32|0;j=i+8|0;k=i+4|0;m=i;oG(j,b);YG(k,c);d=+XG(d);e=+XG(e);f=+XG(f);YG(m,g);h=+XG(h);g=rH(Jd[a&7](j,k,d,e,f,m,h)|0)|0;IG(m);IG(k);T9(j);l=i;return g|0}function cO(){return 2364}function dO(b,d,e,f,h,i,j){b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=+j;var k=0,m=0,n=0,o=0,p=0,q=0,r=0.0;q=l;l=l+32|0;n=q+20|0;o=q+16|0;p=q+12|0;m=q;c[p>>2]=0;AK(o,d,p);r=+wH(o);IG(o);g[n>>2]=r;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(i)|0)){kG(m,i);if((a[m+11>>0]|0)<0){k=1;i=c[m>>2]|0}else{k=1;i=m}}else{k=0;i=0}b=Mo(b,n,e,f,h,i,j)|0;if(k)T9(m);c[o>>2]=0;bI(p,n);cI(d,o,p);IG(p);l=q;return b|0}function eO(a){a=a|0;return 6}function fO(a){a=a|0;return hO()|0}function gO(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+32|0;h=g+8|0;i=g+4|0;j=g;oG(h,b);YG(i,c);YG(j,d);e=WG(e)|0;f=WG(f)|0;f=rH(ae[a&15](h,i,j,e,f)|0)|0;IG(j);IG(i);T9(h);l=g;return f|0}function hO(){return 2396}function iO(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;k=l;l=l+16|0;h=k+8|0;i=k+4|0;j=k;if((a[42616]|0)==0?Haa(42616)|0:0)aH(57976,e);c[j>>2]=0;AK(i,d,j);e=mL(i)|0;IG(i);c[h>>2]=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;g=Xp(b,h,oL(35)|0,0,f,g)|0;c[i>>2]=0;QI(j,h);cI(d,i,j);IG(j);l=k;return g|0}function jO(a,b,c){a=a|0;b=b|0;c=c|0;kO(b,c);return 1}function kO(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+16|0;e=g;f=g+4|0;c[e>>2]=b;if((a[42624]|0)==0?Haa(42624)|0:0){AK(f,57976,e);kG(57980,f);IG(f)}c[d>>2]=(a[57991]|0)<0?c[14495]|0:57980;l=g;return}function lO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+16|0;g=h;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if(!(OF(d)|0)){kG(g,d);if((a[g+11>>0]|0)<0){f=1;d=c[g>>2]|0}else{f=1;d=g}}else{f=0;d=0}b=Rp(b,d,e)|0;if(f)T9(g);l=h;return b|0}function mO(a){a=a|0;return 4}function nO(a){a=a|0;return qO()|0}function oO(){return 35149}function pO(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;b=+XG(b);YG(f,c);YG(g,d);ie[a&1](b,f,g);IG(g);IG(f);l=e;return}function qO(){return 2420}function rO(b,d,e){b=+b;d=d|0;e=e|0;var f=0,g=0,h=0;h=l;l=l+32|0;f=h+16|0;g=h;if(OF(e)|0){uH(f,d);bp(b,f,0)}else{uH(f,d);kG(g,e);bp(b,f,(a[g+11>>0]|0)<0?c[g>>2]|0:g);T9(g)}l=h;return}function sO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(57992,d)|0;tO(57996,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(2)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];ap(b,j,0,f,g,d,n,m,o);l=q;return}function tO(a,b){a=a|0;b=b|0;ic(c[b>>2]|0);fc(c[a>>2]|0);c[a>>2]=c[b>>2];return a|0}function uO(a,b){a=a|0;b=b|0;return +(+wO(b))}function vO(a){a=a|0;return a|0}function wO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,57992,57996,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function xO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yO(a,b,17,c,d);return}function yO(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;g=l;l=l+32|0;j=g+16|0;i=g;zO(i,e,f);h=c[b>>2]|0;b=AO(j)|0;e=BO(j)|0;f=CO(i)|0;fG(a,Xd[d&31](h,b,e,f)|0);l=g;return}function zO(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=a;kN(f,HG(b)|0);kN(f,HG(d)|0);eG(f);l=e;return}function AO(a){a=a|0;return 2}function BO(a){a=a|0;return DO()|0}function CO(a){a=a|0;return a|0}function DO(){return 2436}function EO(a){a=a|0;return 10}function FO(a){a=a|0;return IO()|0}function GO(){return 35155}function HO(a,b,c,d,e,f,g,h,i,j){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;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=l;l=l+48|0;m=k+24|0;n=k+20|0;o=k+16|0;p=k+12|0;q=k+8|0;r=k+4|0;s=k;oG(m,b);YG(n,c);YG(o,d);e=WG(e)|0;f=WG(f)|0;YG(p,g);YG(q,h);YG(r,i);YG(s,j);Pe[a&3](m,n,o,e,f,p,q,r,s);IG(s);IG(r);IG(q);IG(p);IG(o);IG(n);T9(m);l=k;return}function IO(){return 2444}function JO(b,d,e,f,g,h,i,j,k){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;var m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+32|0;o=q+8|0;p=q;tO(58e3,d)|0;tO(58004,e)|0;if(OF(h)|0)d=0;else{kG(o,h);d=(a[o+11>>0]|0)<0?c[o>>2]|0:o;T9(o)}if(OF(i)|0)n=3402823466385288598117041.0e14;else n=+wH(i);if(OF(j)|0)m=3402823466385288598117041.0e14;else m=+wH(j);if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=vO(3)|0;uH(p,k);c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];$o(b,j,0,f,g,d,n,m,o);l=q;return}function KO(a,b){a=a|0;b=b|0;return +(+LO(b))}function LO(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0;d=l;l=l+16|0;g=d+4|0;f=d+8|0;e=d;c[g>>2]=a;QI(e,g);xO(f,58e3,58004,e);b=+wH(f);IG(f);IG(e);l=d;return +b}function MO(a){a=a|0;return 4}function NO(a){a=a|0;return PO()|0}function OO(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;e=l;l=l+32|0;f=e+8|0;g=e+4|0;h=e;oG(f,b);YG(g,c);YG(h,d);d=rH(Od[a&63](f,g,h)|0)|0;IG(h);IG(g);T9(f);l=e;return d|0}function PO(){return 2484}function QO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;if(FJ(e)|0){if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=ep(b,BK(d)|0)|0}else{c[h>>2]=0;AK(g,d,h);j=mL(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;b=gp(b,f,mL(e)|0)|0;c[g>>2]=0;QI(h,f);cI(d,g,h);IG(h)}l=i;return b|0}function RO(a){a=a|0;return 4}function SO(a){a=a|0;return UO()|0}function TO(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=GG(d)|0;d=rH(Od[a&63](f,g,d)|0)|0;IG(g);T9(f);l=e;return d|0}function UO(){return 2500}function VO(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;f=i+8|0;g=i+4|0;h=i;c[h>>2]=0;AK(g,d,h);j=WO(g)|0;IG(g);c[f>>2]=j;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;j=dp(b,f,e)|0;c[g>>2]=0;XO(h,f);cI(d,g,h);IG(h);l=i;return j|0}function WO(a){a=a|0;var b=0,d=0,e=0.0,f=0;b=l;l=l+16|0;f=b+4|0;d=b;a=c[a>>2]|0;e=+dc(a|0,c[(bP(b+8|0)|0)>>2]|0,f|0);RF(d,c[f>>2]|0);a=cP(e)|0;TF(d);l=b;return a|0}function XO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YO(e,b);b=ZO()|0;c[a>>2]=pc(b|0,_O(e)|0)|0;l=d;return}function YO(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;aP(e,xI(b)|0);eG(e);l=d;return}function ZO(){return $O()|0}function _O(a){a=a|0;return a|0}function $O(){return 920}function aP(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function bP(a){a=a|0;return eP()|0}function cP(a){a=+a;return GG(dP(a)|0)|0}function dP(a){a=+a;return ~~a>>>0|0}function eP(){return 2516}function fP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;e=h+8|0;f=h+4|0;g=h;c[g>>2]=0;AK(f,d,g);i=BK(f)|0;IG(f);a[e>>0]=i&1;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;i=cp(b,e)|0;c[f>>2]=0;CK(g,e);cI(d,f,g);IG(g);l=h;return i|0}function gP(a){a=a|0;return 8}function hP(a){a=a|0;return jP()|0}function iP(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;YG(j,b);YG(k,c);YG(m,d);YG(n,e);f=WG(f)|0;YG(o,g);YG(p,h);h=rH(ce[a&7](j,k,m,n,f,o,p)|0)|0;IG(p);IG(o);IG(n);IG(m);IG(k);IG(j);l=i;return h|0}function jP(){return 2520}function kP(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+64|0;n=h+48|0;m=h+40|0;k=h+32|0;j=h+16|0;i=h;o=c[c[(zh()|0)+124>>2]>>2]|0;uH(n,a);uH(m,b);uH(k,d);IL(j,f);IL(i,g);g=Fn(o,n,m,k,e,j,i)|0;l=h;return g|0}function lP(a){a=a|0;return 7}function mP(a){a=a|0;return pP()|0}function nP(){return 35167}function oP(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;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;YG(i,b);YG(j,c);YG(k,d);YG(m,e);YG(n,f);YG(o,g);Ie[a&7](i,j,k,m,n,o);IG(o);IG(n);IG(m);IG(k);IG(j);IG(i);l=h;return}function pP(){return 2552}function qP(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+64|0;m=g+48|0;k=g+40|0;j=g+32|0;i=g+16|0;h=g;n=c[c[(zh()|0)+124>>2]>>2]|0;uH(m,a);uH(k,b);uH(j,d);IL(i,e);IL(h,f);En(n,m,k,j,i,h);l=g;return}function rP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=Cn(b,e)|0;l=f;return e|0}function sP(a){a=a|0;return 2}function tP(a){a=a|0;return vP()|0}function uP(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;oG(d,b);b=rH(Cd[a&63](d)|0)|0;T9(d);l=c;return b|0}function vP(){return 2580}function wP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;return Bn(b)|0}function xP(a){a=a|0;return 3}function yP(a){a=a|0;return AP()|0}function zP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;oG(e,b);YG(f,c);c=rH(Gd[a&63](e,f)|0)|0;IG(f);T9(e);l=d;return c|0}function AP(){return 2588}function BP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(e,d);e=An(b,e)|0;l=f;return e|0}function CP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function DP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;lo(34949,d);l=e;return}function EP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function FP(a){a=a|0;return 3}function GP(a){a=a|0;return IP()|0}function HP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d+12|0;f=d;oG(e,b);oG(f,c);oe[a&127](e,f);T9(f);T9(e);l=d;return}function IP(){return 2600}function JP(b,d){b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[e>>2]=d;yn(b,34949,e);l=f;return}function KP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function LP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;vn(34949,d);l=e;return}function MP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function NP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;tn(34949,d);l=e;return}function OP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function PP(a){a=a|0;return 3}function QP(a){a=a|0;return SP()|0}function RP(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+12|0;f=d;YG(e,b);oG(f,c);oe[a&127](e,f);T9(f);IG(e);l=d;return}function SP(){return 2612}function TP(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+32|0;f=g;e=g+8|0;IL(e,b);if((a[d+11>>0]|0)<0)d=c[d>>2]|0;c[f>>2]=d;rn(e,34949,f);l=g;return}function UP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function VP(b){b=b|0;var d=0,e=0;e=l;l=l+16|0;d=e;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;c[d>>2]=b;pn(34949,d);l=e;return}function WP(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;on(b,0);return}function XP(a){a=a|0;return 2}function YP(a){a=a|0;return _P()|0}function ZP(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;f=d+4|0;e=d;YG(e,b);c[f>>2]=Cd[a&63](e)|0;b=xI(f)|0;IG(e);l=d;return b|0}function _P(){return 2624}function $P(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)b=io(mL(b)|0)|0;else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);b=ho((a[d+11>>0]|0)<0?c[d>>2]|0:d)|0;T9(d)}l=h;return b|0}function aQ(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=l;l=l+16|0;d=h+4|0;e=h;iL(e,b);kG(d,e);f=Nz(34965)|0;i=a[d+11>>0]|0;if((f|0)==((i<<24>>24<0?c[d+4>>2]|0:i&255)|0)){i=(W9(d,0,-1,34965,f)|0)==0;T9(d);IG(e);if(i)fo(mL(b)|0);else g=5}else{T9(d);IG(e);g=5}if((g|0)==5){kG(d,b);el((a[d+11>>0]|0)<0?c[d>>2]|0:d);T9(d)}l=h;return}function bQ(a){a=a|0;return 3}function cQ(a){a=a|0;return fQ()|0}function dQ(){return 35176}function eQ(a,b,c){a=a|0;b=b|0;c=+c;b=WG(b)|0;c=+XG(c);ke[a&7](b,c);return}function fQ(){return 2632}function gQ(a){a=a|0;return 2}function hQ(a){a=a|0;return kQ()|0}function iQ(){return 35181}function jQ(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;g[e>>2]=+yd[a&3](b);c=+kH(e);l=d;return +c}function kQ(){return 2644}function lQ(a){a=a|0;return 1}function mQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Bd[a&31]()|0;a=RH(d)|0;l=b;return a|0}function nQ(a){a=a|0;return 4}function oQ(a){a=a|0;return qQ()|0}function pQ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;b=WG(b)|0;YG(f,c);d=FH(d)|0;ue[a&63](b,f,d);IG(f);l=e;return}function qQ(){return 2652}function rQ(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if(OF(d)|0)hr(b,0,e);else{kG(f,d);hr(b,(a[f+11>>0]|0)<0?c[f>>2]|0:f,e);T9(f)}l=g;return}function sQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;$m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function tQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;_m(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function uQ(a){a=a|0;return 2}function vQ(a){a=a|0;return xQ()|0}function wQ(a,b){a=a|0;b=b|0;b=II(b)|0;je[a&127](b);return}function xQ(){return 2668}function yQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Vm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function zQ(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Cp(c);l=b;return}function AQ(a){a=a|0;return 2}function BQ(a){a=a|0;return DQ()|0}function CQ(a,b){a=a|0;b=b|0;b=FH(b)|0;je[a&127](b);return}function DQ(){return 2676}function EQ(a){a=a|0;return 3}function FQ(a){a=a|0;return HQ()|0}function GQ(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;h=e+8|0;f=e+4|0;g=e;YG(f,b);YG(g,d);c[h>>2]=Gd[a&63](f,g)|0;d=xI(h)|0;IG(g);IG(f);l=e;return d|0}function HQ(){return 2684}function IQ(a,b){a=a|0;b=b|0;a=mL(a)|0;return Rf(a,+wH(b))|0}function JQ(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=l;l=l+16|0;e=c+8|0;d=c;Tm(e);aH(d,b);bH(a,e,d);IG(d);l=c;return}function KQ(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Rm()|0;LQ(a,d);l=b;return}function LQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;MQ(e,b);b=NQ()|0;c[a>>2]=pc(b|0,OQ(e)|0)|0;l=d;return}function MQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;RQ(e,QQ(c[b>>2]|0)|0);eG(e);l=d;return}function NQ(){return PQ()|0}function OQ(a){a=a|0;return a|0}function PQ(){return 184}function QQ(a){a=a|0;return a|0}function RQ(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function SQ(a){a=a|0;return 2}function TQ(a){a=a|0;return VQ()|0}function UQ(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;b=WG(b)|0;oe[a&127](d,b);b=HG(d)|0;IG(d);l=c;return b|0}function VQ(){return 2696}function WQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=Tf(b)|0;XQ(a,e);l=d;return}function XQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;YQ(e,b);b=ZQ()|0;c[a>>2]=pc(b|0,_Q(e)|0)|0;l=d;return}function YQ(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;bR(e,aR(c[b>>2]|0)|0);eG(e);l=d;return}function ZQ(){return $Q()|0}function _Q(a){a=a|0;return a|0}function $Q(){return 208}function aR(a){a=a|0;return a|0}function bR(a,b){a=a|0;b=b|0;c[c[a>>2]>>2]=b;c[a>>2]=(c[a>>2]|0)+8;return}function cR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+16|0;e=i+4|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+wH(d));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){uH(e,d);Dk(b,e)}l=i;return}function dR(a){a=a|0;return 2}function eR(a){a=a|0;return gR()|0}function fR(a,b){a=a|0;b=b|0;b=WG(b)|0;je[a&127](b);return}function gR(){return 2704}function hR(a){a=a|0;return 3}function iR(a){a=a|0;return kR()|0}function jR(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+16|0;e=d;b=WG(b)|0;YG(e,c);oe[a&127](b,e);IG(e);l=d;return}function kR(){return 2712}function lR(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=l;l=l+32|0;e=i+8|0;f=i;iL(f,d);kG(e,f);g=Nz(34965)|0;j=a[e+11>>0]|0;if((g|0)==((j<<24>>24<0?c[e+4>>2]|0:j&255)|0)){j=(W9(e,0,-1,34965,g)|0)==0;T9(e);IG(f);if(j)Ck(b,+((WO(d)|0)>>>0));else h=5}else{T9(e);IG(f);h=5}if((h|0)==5){IL(e,d);Bk(b,e)}l=i;return}function mR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35212;O9(34620,b)|0;l=a;return}function nR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function oR(a){a=a|0;return 1}function pR(a){a=a|0;return rR()|0}function qR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;je[a&127](c);a=HG(c)|0;IG(c);l=b;return a|0}function rR(){return 2724}function sR(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=35212;O9(34620,d)|0;YF(a);l=b;return}function tR(){var a=0,b=0;a=l;l=l+16|0;b=a;c[b>>2]=35329;O9(34620,b)|0;l=a;return}function uR(a){a=a|0;return 3}function vR(a){a=a|0;return yR()|0}function wR(){return 35461}function xR(a,b,c){a=a|0;b=+b;c=+c;b=+XG(b);c=+XG(c);ge[a&3](b,c);return}function yR(){return 2728}function zR(b){b=b|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Cm(b);return}function AR(a){a=a|0;return 4}function BR(a){a=a|0;return DR()|0}function CR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;oG(f,b);c=FH(c)|0;d=WG(d)|0;ue[a&63](f,c,d);T9(f);l=e;return}function DR(){return 2740}function ER(b,d,e){b=b|0;d=d|0;e=e|0;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;Bm(b,d,e);return}function FR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);xm(b,f,e);l=g;return}function GR(a){a=a|0;return 4}function HR(a){a=a|0;return JR()|0}function IR(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;oG(f,b);YG(g,c);d=WG(d)|0;ue[a&63](f,g,d);IG(g);T9(f);l=e;return}function JR(){return 2756}function KR(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g;if((a[b+11>>0]|0)<0)b=c[b>>2]|0;uH(f,d);vm(b,f,e);l=g;return}function LR(){Uk();return}function MR(a,b){a=a|0;b=b|0;ym(a,b);return}function NR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);wm(d,b);l=c;return}function OR(a,b){a=a|0;b=b|0;var c=0,d=0;c=l;l=l+16|0;d=c;uH(d,a);um(d,b);l=c;return}function PR(a){a=a|0;return 3}function QR(a){a=a|0;return SR()|0}function RR(a,b,c){a=a|0;b=b|0;c=c|0;b=FH(b)|0;c=WG(c)|0;oe[a&127](b,c);return}function SR(){return 2772}function TR(a){a=a|0;var b=0,c=0;b=l;l=l+16|0;c=b;uH(c,a);Em(c);l=b;return}function UR(a){a=a|0;return 5} +function T7(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+240|0;m=n;c[m>>2]=a;a:do if((e|0)>1){k=0-b|0;g=a;j=e;e=1;while(1){h=g+k|0;i=j+-2|0;g=h+(0-(c[f+(i<<2)>>2]|0))|0;if((Gd[d&63](a,g)|0)>-1?(Gd[d&63](a,h)|0)>-1:0)break a;a=e+1|0;e=m+(e<<2)|0;if((Gd[d&63](g,h)|0)>-1){c[e>>2]=g;e=j+-1|0}else{c[e>>2]=h;g=h;e=i}if((e|0)<=1){e=a;break a}j=e;e=a;a=c[m>>2]|0}}else e=1;while(0);Z7(b,m,e);l=n;return}function U7(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 V7(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;p=l;l=l+240|0;n=p+232|0;o=p;q=c[e>>2]|0;c[n>>2]=q;j=c[e+4>>2]|0;k=n+4|0;c[k>>2]=j;c[o>>2]=a;a:do if((q|0)!=1|(j|0)!=0?(m=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Gd[d&63](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+m|0;i=c[h+(f+-2<<2)>>2]|0;if((Gd[d&63](g,j)|0)>-1){i=10;break a}if((Gd[d&63](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[o+(e<<2)>>2]=j;q=X7(n)|0;U7(n,q);f=q+f|0;if(!((c[n>>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((Gd[d&63](a,c[o>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{q=j;e=g;g=1;j=a;a=q}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){Z7(b,o,e);T7(a,b,d,f,h)}l=p;return}function W7(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=Y7(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function Y7(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;do{a=a+1|0;b=b>>>1}while(!(b&1|0))}else a=0;else a=32;return a|0}function Z7(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+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;Zaa(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;Zaa(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);l=h;return}function _7(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 $7(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function a8(a,b){a=a|0;b=b|0;b8(a,b)|0;return a|0}function b8(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=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 c8(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=4;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){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 d8(){return 4188}function e8(b,c){b=b|0;c=c|0;b=t8(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function f8(b,c){b=b|0;c=c|0;var d=0;d=a[c>>0]|0;do if(d<<24>>24){b=e8(b,d<<24>>24)|0;if(b){if(a[c+1>>0]|0)if(a[b+1>>0]|0){if(!(a[c+2>>0]|0)){b=n8(b,c)|0;break}if(a[b+2>>0]|0){if(!(a[c+3>>0]|0)){b=o8(b,c)|0;break}if(a[b+3>>0]|0)if(!(a[c+4>>0]|0)){b=p8(b,c)|0;break}else{b=q8(b,c)|0;break}else b=0}else b=0}else b=0}else b=0}while(0);return b|0}function g8(a,b,c){a=a|0;b=b|0;c=c|0;h8(a,b,c)|0;return a|0}function h8(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=11}}else e=0}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);$aa(b|0,0,e|0)|0;return b|0}function i8(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;c[a+100>>2]=(b|0)!=0&(f|0)>(b|0)?e+b|0:d;return}function j8(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;a:do if(e>>>0>36){c[(N7()|0)>>2]=22;h=0;g=0}else{r=b+4|0;q=b+100|0;do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);b:do switch(i|0){case 43:case 45:{i=((i|0)==45)<<31>>31;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;p=i;i=d[j>>0]|0;break b}else{p=i;i=k8(b)|0;break b}}default:p=0}while(0);j=(e|0)==0;do if((e|16|0)==16&(i|0)==48){i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|32|0)!=120)if(j){e=8;n=46;break}else{n=32;break}i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((d[39202+i>>0]|0)>15){g=(c[q>>2]|0)==0;if(!g)c[r>>2]=(c[r>>2]|0)+-1;if(!f){i8(b,0);h=0;g=0;break a}if(g){h=0;g=0;break a}c[r>>2]=(c[r>>2]|0)+-1;h=0;g=0;break a}else{e=16;n=46}}else{e=j?10:e;if(e>>>0>(d[39202+i>>0]|0)>>>0)n=32;else{if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;i8(b,0);c[(N7()|0)>>2]=22;h=0;g=0;break a}}while(0);c:do if((n|0)==32)if((e|0)==10){e=i+-48|0;if(e>>>0<10){i=0;j=e;do{i=(i*10|0)+j|0;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;j=e+-48|0}while(j>>>0<10&i>>>0<429496729);f=0}else{e=i;i=0;f=0}k=e+-48|0;if(k>>>0<10){j=e;do{e=Paa(i|0,f|0,10,0)|0;l=z;m=((k|0)<0)<<31>>31;o=~m;if(l>>>0>o>>>0|(l|0)==(o|0)&e>>>0>~k>>>0){e=10;n=72;break c}i=Qaa(e|0,l|0,k|0,m|0)|0;f=z;e=c[r>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[r>>2]=e+1;j=d[e>>0]|0}else j=k8(b)|0;k=j+-48|0}while(k>>>0<10&(f>>>0<429496729|(f|0)==429496729&i>>>0<2576980378));if(k>>>0>9){j=p;e=f}else{e=10;n=72}}else{j=p;e=f}}else n=46;while(0);d:do if((n|0)==46){if(!(e+-1&e)){n=a[39458+((e*23|0)>>>5&7)>>0]|0;f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k|i<>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<134217728&e>>>0>k>>>0);k=0}else{j=i;k=0;i=0}l=Waa(-1,-1,n|0)|0;m=z;if(e>>>0<=(f&255)>>>0|(m>>>0>>0|(m|0)==(k|0)&l>>>0>>0)){f=k;n=72;break}else j=k;while(1){i=Xaa(i|0,j|0,n|0)|0;k=z;i=i|f&255;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0|(k>>>0>m>>>0|(k|0)==(m|0)&i>>>0>l>>>0)){f=k;n=72;break d}else j=k}}f=a[39202+i>>0]|0;j=f&255;if(e>>>0>j>>>0){i=0;k=j;do{i=k+(O(i,e)|0)|0;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;k=f&255}while(i>>>0<119304647&e>>>0>k>>>0);k=0}else{j=i;i=0;k=0}if(e>>>0>(f&255)>>>0){n=Uaa(-1,-1,e|0,0)|0;o=z;m=k;while(1){if(m>>>0>o>>>0|(m|0)==(o|0)&i>>>0>n>>>0){f=m;n=72;break d}k=Paa(i|0,m|0,e|0,0)|0;l=z;f=f&255;if(l>>>0>4294967295|(l|0)==-1&k>>>0>~f>>>0){f=m;n=72;break d}i=Qaa(k|0,l|0,f|0,0)|0;k=z;j=c[r>>2]|0;if(j>>>0<(c[q>>2]|0)>>>0){c[r>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;f=a[39202+j>>0]|0;if(e>>>0<=(f&255)>>>0){f=k;n=72;break}else m=k}}else{f=k;n=72}}while(0);if((n|0)==72)if(e>>>0>(d[39202+j>>0]|0)>>>0){do{i=c[r>>2]|0;if(i>>>0<(c[q>>2]|0)>>>0){c[r>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(e>>>0>(d[39202+i>>0]|0)>>>0);c[(N7()|0)>>2]=34;j=(g&1|0)==0&0==0?p:0;e=h;i=g}else{j=p;e=f}if(c[q>>2]|0)c[r>>2]=(c[r>>2]|0)+-1;if(!(e>>>0>>0|(e|0)==(h|0)&i>>>0>>0)){if(!((g&1|0)!=0|0!=0|(j|0)!=0)){c[(N7()|0)>>2]=34;g=Qaa(g|0,h|0,-1,-1)|0;h=z;break}if(e>>>0>h>>>0|(e|0)==(h|0)&i>>>0>g>>>0){c[(N7()|0)>>2]=34;break}}g=((j|0)<0)<<31>>31;g=Raa(i^j|0,e^g|0,j|0,g|0)|0;h=z}while(0);z=h;return g|0}function k8(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=b+104|0;h=c[f>>2]|0;if((h|0)!=0?(c[b+108>>2]|0)>=(h|0):0)i=4;else{e=l8(b)|0;if((e|0)>=0){g=c[f>>2]|0;f=b+8|0;if(g){j=c[f>>2]|0;h=c[b+4>>2]|0;f=g-(c[b+108>>2]|0)|0;g=j;if((j-h|0)<(f|0))f=g;else f=h+(f+-1)|0}else{g=c[f>>2]|0;f=g}c[b+100>>2]=f;f=b+4|0;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;j=b+108|0;c[j>>2]=g+1-f+(c[j>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else i=4}if((i|0)==4){c[b+100>>2]=0;e=-1}return e|0}function l8(a){a=a|0;var b=0,e=0;e=l;l=l+16|0;b=e;if((m8(a)|0)==0?(Od[c[a+32>>2]&63](a,b,1)|0)==1:0)a=d[b>>0]|0;else a=-1;l=e;return a|0}function m8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=b+20|0;e=b+28|0;if((c[d>>2]|0)>>>0>(c[e>>2]|0)>>>0)Od[c[b+36>>2]&63](b,0,0)|0;c[b+16>>2]=0;c[e>>2]=0;c[d>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function n8(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;g=(d[c>>0]|0)<<8|(d[c+1>>0]|0);f=d[b>>0]|0;while(1){c=b+1|0;e=a[c>>0]|0;if(!(e<<24>>24))break;f=f<<8&65280|e&255;if((f|0)==(g|0))break;else b=c}return (e<<24>>24?b:0)|0}function o8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8;e=b+2|0;c=a[e>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(c&255)<<8;if(!((b|0)==(f|0)|c<<24>>24==0))do{e=e+1|0;c=a[e>>0]|0;b=(b|c&255)<<8}while(!((b|0)==(f|0)|c<<24>>24==0));return (c<<24>>24?e+-2|0:0)|0}function p8(b,c){b=b|0;c=c|0;var e=0,f=0;f=(d[c+1>>0]|0)<<16|(d[c>>0]|0)<<24|(d[c+2>>0]|0)<<8|(d[c+3>>0]|0);c=b+3|0;e=a[c>>0]|0;b=(d[b+1>>0]|0)<<16|(d[b>>0]|0)<<24|(d[b+2>>0]|0)<<8|e&255;if(!(e<<24>>24==0|(b|0)==(f|0)))do{c=c+1|0;e=a[c>>0]|0;b=b<<8|e&255}while(!(e<<24>>24==0|(b|0)==(f|0)));return (e<<24>>24?c+-3|0:0)|0}function q8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+1056|0;t=v+1024|0;u=v;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[t+24>>2]=0;c[t+28>>2]=0;e=a[d>>0]|0;a:do if(e<<24>>24){s=0;do{if(!(a[b+s>>0]|0)){e=0;break a}r=t+(((e&255)>>>5&255)<<2)|0;c[r>>2]=c[r>>2]|1<<(e&31);s=s+1|0;c[u+((e&255)<<2)>>2]=s;e=a[d+s>>0]|0}while(e<<24>>24!=0);m=s>>>0>1;if(m){f=0;k=-1;g=1;b:while(1){h=1;e=f;while(1){f=g;c:while(1){j=1;while(1){g=a[d+(j+k)>>0]|0;i=a[d+f>>0]|0;if(g<<24>>24!=i<<24>>24)break c;if((j|0)==(h|0))break;j=j+1|0;f=j+e|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}e=h+e|0;f=e+1|0;if(f>>>0>=s>>>0){n=h;e=k;break b}}h=f-k|0;if((g&255)<=(i&255))break;g=f+1|0;if(g>>>0>=s>>>0){n=h;e=k;break b}else e=f}g=e+2|0;if(g>>>0>=s>>>0){n=1;break}else{f=e+1|0;k=e}}if(m){h=0;m=-1;i=1;while(1){f=1;g=h;while(1){h=i;d:while(1){k=1;while(1){i=a[d+(k+m)>>0]|0;j=a[d+h>>0]|0;if(i<<24>>24!=j<<24>>24)break d;if((k|0)==(f|0))break;k=k+1|0;h=k+g|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}g=f+g|0;h=g+1|0;if(h>>>0>=s>>>0){i=n;g=m;h=26;break a}}f=h-m|0;if((i&255)>=(j&255))break;i=h+1|0;if(i>>>0>=s>>>0){i=n;g=m;h=26;break a}else g=h}i=g+2|0;if(i>>>0>=s>>>0){i=n;f=1;h=26;break}else{h=g+1|0;m=g}}}else{i=n;f=1;g=-1;h=26}}else{i=1;e=-1;f=1;g=-1;h=26}}else{i=1;e=-1;s=0;f=1;g=-1;h=26}while(0);e:do if((h|0)==26){q=(g+1|0)>>>0>(e+1|0)>>>0;f=q?f:i;q=q?g:e;r=q+1|0;if(!(_7(d,d+f|0,r)|0))p=s-f|0;else{f=s-q+-1|0;p=0;f=(q>>>0>f>>>0?q:f)+1|0}k=s|63;m=s+-1|0;n=(p|0)!=0;o=s-f|0;e=b;j=0;g=b;while(1){h=e;do if((g-h|0)>>>0>>0){i=R7(g,0,k)|0;if(i)if((i-h|0)>>>0>>0){e=0;break e}else break;else{i=g+k|0;break}}else i=g;while(0);g=a[e+m>>0]|0;f:do if(!(1<<(g&31)&c[t+(((g&255)>>>5&255)<<2)>>2])){h=0;g=s}else{g=s-(c[u+((g&255)<<2)>>2]|0)|0;if(g|0){h=0;g=n&(j|0)!=0&g>>>0>>0?o:g;break}g=r>>>0>j>>>0?r:j;h=a[d+g>>0]|0;g:do if(!(h<<24>>24))g=r;else{while(1){if(h<<24>>24!=(a[e+g>>0]|0))break;g=g+1|0;h=a[d+g>>0]|0;if(!(h<<24>>24)){g=r;break g}}h=0;g=g-q|0;break f}while(0);while(1){if(g>>>0<=j>>>0)break e;g=g+-1|0;if((a[d+g>>0]|0)!=(a[e+g>>0]|0)){h=p;g=f;break}}}while(0);e=e+g|0;j=h;g=i}}while(0);l=v;return e|0}function r8(a){a=a|0;return 0}function s8(a){a=a|0;return}function t8(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(c8(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=O(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 u8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+128|0;g=n+124|0;m=n;h=m;i=4432;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){b=g;d=1;k=4}else{c[(N7()|0)>>2]=75;d=-1}else k=4;if((k|0)==4){k=-2-b|0;k=d>>>0>k>>>0?k:d;c[m+48>>2]=k;g=m+20|0;c[g>>2]=b;c[m+44>>2]=b;d=b+k|0;b=m+16|0;c[b>>2]=d;c[m+28>>2]=d;d=v8(m,e,f)|0;if(k){m=c[g>>2]|0;a[m+(((m|0)==(c[b>>2]|0))<<31>>31)>>0]=0}}l=n;return d|0}function v8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+224|0;n=s+120|0;p=s+80|0;q=s;r=s+136|0;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[n>>2]=c[e>>2];if((w8(0,d,n,q,p)|0)<0)e=-1;else{if((c[b+76>>2]|0)>-1)o=r8(b)|0;else o=0;e=c[b>>2]|0;m=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;f=b+48|0;if(!(c[f>>2]|0)){g=b+44|0;h=c[g>>2]|0;c[g>>2]=r;i=b+28|0;c[i>>2]=r;j=b+20|0;c[j>>2]=r;c[f>>2]=80;k=b+16|0;c[k>>2]=r+80;e=w8(b,d,n,q,p)|0;if(h){Od[c[b+36>>2]&63](b,0,0)|0;e=(c[j>>2]|0)==0?-1:e;c[g>>2]=h;c[f>>2]=0;c[k>>2]=0;c[i>>2]=0;c[j>>2]=0}}else e=w8(b,d,n,q,p)|0;f=c[b>>2]|0;c[b>>2]=f|m;if(o|0)s8(b);e=(f&32|0)==0?e:-1}l=s;return e|0}function w8(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+64|0;D=H+16|0;E=H;B=H+24|0;F=H+8|0;G=H+20|0;c[D>>2]=e;x=(d|0)!=0;y=B+40|0;A=y;B=B+39|0;C=F+4|0;k=0;j=0;p=0;a:while(1){do if((j|0)>-1)if((k|0)>(2147483647-j|0)){c[(N7()|0)>>2]=75;j=-1;break}else{j=k+j|0;break}while(0);k=a[e>>0]|0;if(!(k<<24>>24)){w=86;break}else m=e;b:while(1){switch(k<<24>>24){case 37:{k=m;w=9;break b}case 0:{k=m;break b}default:{}}v=m+1|0;c[D>>2]=v;k=a[v>>0]|0;m=v}c:do if((w|0)==9)while(1){w=0;if((a[m+1>>0]|0)!=37)break c;k=k+1|0;m=m+2|0;c[D>>2]=m;if((a[m>>0]|0)==37)w=9;else break}while(0);k=k-e|0;if(x)x8(d,e,k);if(k|0){e=m;continue}n=m+1|0;k=(a[n>>0]|0)+-48|0;if(k>>>0<10){v=(a[m+2>>0]|0)==36;t=v?k:-1;p=v?1:p;n=v?m+3|0:n}else t=-1;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0;if(v>>>0>31|(1<>24)+-32|m;n=n+1|0;c[D>>2]=n;k=a[n>>0]|0;v=(k<<24>>24)+-32|0}while(!(v>>>0>31|(1<>24==42){o=n+1|0;k=(a[o>>0]|0)+-48|0;if(k>>>0<10?(a[n+2>>0]|0)==36:0){c[i+(k<<2)>>2]=10;k=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;p=1;n=n+3|0}else{if(p|0){j=-1;break}if(x){p=(c[f>>2]|0)+(4-1)&~(4-1);k=c[p>>2]|0;c[f>>2]=p+4;p=0;n=o}else{k=0;p=0;n=o}}c[D>>2]=n;u=(k|0)<0;k=u?0-k|0:k;u=u?m|8192:m}else{k=y8(D)|0;if((k|0)<0){j=-1;break}u=m;n=c[D>>2]|0}do if((a[n>>0]|0)==46){if((a[n+1>>0]|0)!=42){c[D>>2]=n+1;m=y8(D)|0;n=c[D>>2]|0;break}o=n+2|0;m=(a[o>>0]|0)+-48|0;if(m>>>0<10?(a[n+3>>0]|0)==36:0){c[i+(m<<2)>>2]=10;m=c[g+((a[o>>0]|0)+-48<<3)>>2]|0;n=n+4|0;c[D>>2]=n;break}if(p|0){j=-1;break a}if(x){v=(c[f>>2]|0)+(4-1)&~(4-1);m=c[v>>2]|0;c[f>>2]=v+4}else m=0;c[D>>2]=o;n=o}else m=-1;while(0);s=0;while(1){if(((a[n>>0]|0)+-65|0)>>>0>57){j=-1;break a}v=n+1|0;c[D>>2]=v;o=a[(a[n>>0]|0)+-65+(39467+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;n=v}else break}if(!(o<<24>>24)){j=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){j=-1;break a}else w=48;else{if(r){c[i+(t<<2)>>2]=q;r=g+(t<<3)|0;t=c[r+4>>2]|0;w=E;c[w>>2]=c[r>>2];c[w+4>>2]=t;w=48;break}if(!x){j=0;break a}z8(E,q,f)}while(0);if((w|0)==48?(w=0,!x):0){k=0;e=v;continue}n=a[n>>0]|0;n=(s|0)!=0&(n&15|0)==3?n&-33:n;t=u&-65537;u=(u&8192|0)==0?u:t;d:do switch(n|0){case 110:switch((s&255)<<24>>24){case 0:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 1:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 2:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}case 3:{b[c[E>>2]>>1]=j;k=0;e=v;continue a}case 4:{a[c[E>>2]>>0]=j;k=0;e=v;continue a}case 6:{c[c[E>>2]>>2]=j;k=0;e=v;continue a}case 7:{k=c[E>>2]|0;c[k>>2]=j;c[k+4>>2]=((j|0)<0)<<31>>31;k=0;e=v;continue a}default:{k=0;e=v;continue a}}case 112:{n=120;m=m>>>0>8?m:8;e=u|8;w=60;break}case 88:case 120:{e=u;w=60;break}case 111:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;r=B8(e,n,y)|0;s=A-r|0;o=0;q=39931;m=(u&8|0)==0|(m|0)>(s|0)?m:s+1|0;s=u;w=66;break}case 105:case 100:{n=E;e=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)<0){e=Raa(0,0,e|0,n|0)|0;n=z;o=E;c[o>>2]=e;c[o+4>>2]=n;o=1;q=39931;w=65;break d}else{o=(u&2049|0)!=0&1;q=(u&2048|0)==0?((u&1|0)==0?39931:39933):39932;w=65;break d}}case 117:{n=E;o=0;q=39931;e=c[n>>2]|0;n=c[n+4>>2]|0;w=65;break}case 99:{a[B>>0]=c[E>>2];e=B;o=0;q=39931;r=y;n=1;m=t;break}case 109:{n=D8(c[(N7()|0)>>2]|0)|0;w=70;break}case 115:{n=c[E>>2]|0;n=n|0?n:39941;w=70;break}case 67:{c[F>>2]=c[E>>2];c[C>>2]=0;c[E>>2]=F;r=-1;n=F;w=74;break}case 83:{e=c[E>>2]|0;if(!m){E8(d,32,k,0,u);e=0;w=83}else{r=m;n=e;w=74}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{k=G8(d,+h[E>>3],k,m,u,n)|0;e=v;continue a}default:{o=0;q=39931;r=y;n=m;m=u}}while(0);e:do if((w|0)==60){u=E;t=c[u>>2]|0;u=c[u+4>>2]|0;r=A8(t,u,y,n&32)|0;q=(e&8|0)==0|(t|0)==0&(u|0)==0;o=q?0:2;q=q?39931:39931+(n>>4)|0;s=e;e=t;n=u;w=66}else if((w|0)==65){r=C8(e,n,y)|0;s=u;w=66}else if((w|0)==70){w=0;u=R7(n,0,m)|0;s=(u|0)==0;e=n;o=0;q=39931;r=s?n+m|0:u;n=s?m:u-n|0;m=t}else if((w|0)==74){w=0;q=n;e=0;m=0;while(1){o=c[q>>2]|0;if(!o)break;m=F8(G,o)|0;if((m|0)<0|m>>>0>(r-e|0)>>>0)break;e=m+e|0;if(r>>>0>e>>>0)q=q+4|0;else break}if((m|0)<0){j=-1;break a}E8(d,32,k,e,u);if(!e){e=0;w=83}else{o=0;while(1){m=c[n>>2]|0;if(!m){w=83;break e}m=F8(G,m)|0;o=m+o|0;if((o|0)>(e|0)){w=83;break e}x8(d,G,m);if(o>>>0>=e>>>0){w=83;break}else n=n+4|0}}}while(0);if((w|0)==66){w=0;n=(e|0)!=0|(n|0)!=0;u=(m|0)!=0|n;n=A-r+((n^1)&1)|0;e=u?r:y;r=y;n=u?((m|0)>(n|0)?m:n):m;m=(m|0)>-1?s&-65537:s}else if((w|0)==83){w=0;E8(d,32,k,e,u^8192);k=(k|0)>(e|0)?k:e;e=v;continue}t=r-e|0;s=(n|0)<(t|0)?t:n;u=s+o|0;k=(k|0)<(u|0)?u:k;E8(d,32,k,u,m);x8(d,q,o);E8(d,48,k,u,m^65536);E8(d,48,s,t,0);x8(d,e,t);E8(d,32,k,u,m^8192);e=v}f:do if((w|0)==86)if(!d)if(p){j=1;while(1){e=c[i+(j<<2)>>2]|0;if(!e)break;z8(g+(j<<3)|0,e,f);e=j+1|0;if((j|0)<9)j=e;else{j=e;break}}if((j|0)<10)while(1){if(c[i+(j<<2)>>2]|0){j=-1;break f}if((j|0)<9)j=j+1|0;else{j=1;break}}else j=1}else j=0;while(0);l=H;return j|0}function x8(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))T8(b,d,a)|0;return}function y8(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;f=(a[e>>0]|0)+-48|0;if(f>>>0<10){d=0;do{d=f+(d*10|0)|0;e=e+1|0;c[b>>2]=e;f=(a[e>>0]|0)+-48|0}while(f>>>0<10)}else d=0;return d|0}function z8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function A8(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[39979+(b&15)>>0]|0|f;b=Waa(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function B8(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=Waa(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function C8(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){while(1){e=Vaa(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=Uaa(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}c=b}else c=b;if(c)while(1){d=d+-1|0;a[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function D8(a){a=a|0;return N8(a,c[(M8()|0)+188>>2]|0)|0}function E8(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;$aa(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{x8(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}x8(a,f,e)}l=g;return}function F8(a,b){a=a|0;b=b|0;if(!a)a=0;else a=K8(a,b,0)|0;return a|0}function G8(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=l;l=l+560|0;m=H+8|0;u=H;G=H+524|0;F=G;n=H+512|0;c[u>>2]=0;E=n+12|0;H8(e)|0;if((z|0)<0){e=-e;C=1;B=39948}else{C=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?39949:39954):39951}H8(e)|0;do if(0==0&(z&2146435072|0)==2146435072){G=(i&32|0)!=0;j=C+3|0;E8(b,32,f,j,h&-65537);x8(b,B,C);x8(b,e!=e|0.0!=0.0?(G?41898:39975):G?39967:39971,3);E8(b,32,f,j,h^8192)}else{r=+I8(e,u)*2.0;j=r!=0.0;if(j)c[u>>2]=(c[u>>2]|0)+-1;w=i|32;if((w|0)==97){p=i&32;s=(p|0)==0?B:B+9|0;q=C|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[s>>0]|0)==45){e=-(e+(-r-e));break}else{e=r+e-e;break}}else e=r;while(0);k=c[u>>2]|0;j=(k|0)<0?0-k|0:k;j=C8(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=n+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;o=j+-2|0;a[o>>0]=i+15;m=(g|0)<1;n=(h&8|0)==0;j=G;do{D=~~e;k=j+1|0;a[j>>0]=p|d[39979+D>>0];e=(e-+(D|0))*16.0;if((k-F|0)==1?!(n&(m&e==0.0)):0){a[k>>0]=46;j=j+2|0}else j=k}while(e!=0.0);if((g|0)!=0?(-2-F+j|0)<(g|0):0){k=j-F|0;j=g+2|0}else{j=j-F|0;k=j}E=E-o|0;F=E+q+j|0;E8(b,32,f,F,h);x8(b,s,q);E8(b,48,f,F,h^65536);x8(b,G,k);E8(b,48,j-k|0,0,0);x8(b,o,E);E8(b,32,f,F,h^8192);j=F;break}k=(g|0)<0?6:g;if(j){j=(c[u>>2]|0)+-28|0;c[u>>2]=j;e=r*268435456.0}else{e=r;j=c[u>>2]|0}D=(j|0)<0?m:m+288|0;m=D;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);if((j|0)>0){n=D;p=m;while(1){o=(j|0)<29?j:29;j=p+-4|0;if(j>>>0>=n>>>0){m=0;do{x=Xaa(c[j>>2]|0,0,o|0)|0;x=Qaa(x|0,z|0,m|0,0)|0;y=z;v=Vaa(x|0,y|0,1e9,0)|0;c[j>>2]=v;m=Uaa(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=n>>>0);if(m){n=n+-4|0;c[n>>2]=m}}m=p;while(1){if(m>>>0<=n>>>0)break;j=m+-4|0;if(!(c[j>>2]|0))m=j;else break}j=(c[u>>2]|0)-o|0;c[u>>2]=j;if((j|0)>0)p=m;else break}}else n=D;if((j|0)<0){g=((k+25|0)/9|0)+1|0;t=(w|0)==102;do{s=0-j|0;s=(s|0)<9?s:9;if(n>>>0>>0){o=(1<>>s;q=0;j=n;do{y=c[j>>2]|0;c[j>>2]=(y>>>s)+q;q=O(y&o,p)|0;j=j+4|0}while(j>>>0>>0);j=(c[n>>2]|0)==0?n+4|0:n;if(!q){n=j;j=m}else{c[m>>2]=q;n=j;j=m+4|0}}else{n=(c[n>>2]|0)==0?n+4|0:n;j=m}m=t?D:n;m=(j-m>>2|0)>(g|0)?m+(g<<2)|0:j;j=(c[u>>2]|0)+s|0;c[u>>2]=j}while((j|0)<0);j=n;g=m}else{j=n;g=m}y=D;if(j>>>0>>0){m=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0)}}else m=0;t=(w|0)==103;v=(k|0)!=0;n=k-((w|0)!=102?m:0)+((v&t)<<31>>31)|0;if((n|0)<(((g-y>>2)*9|0)+-9|0)){n=n+9216|0;s=D+4+(((n|0)/9|0)+-1024<<2)|0;n=(n|0)%9|0;if((n|0)<8){o=10;while(1){o=o*10|0;if((n|0)<7)n=n+1|0;else break}}else o=10;p=c[s>>2]|0;q=(p>>>0)%(o>>>0)|0;n=(s+4|0)==(g|0);if(!(n&(q|0)==0)){r=(((p>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(o|0)/2|0;e=q>>>0>>0?.5:n&(q|0)==(x|0)?1.0:1.5;if(C){x=(a[B>>0]|0)==45;e=x?-e:e;r=x?-r:r}n=p-q|0;c[s>>2]=n;if(r+e!=r){x=n+o|0;c[s>>2]=x;if(x>>>0>999999999){m=s;while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}x=(c[n>>2]|0)+1|0;c[n>>2]=x;if(x>>>0>999999999)m=n;else break}}else n=s;m=(y-j>>2)*9|0;p=c[j>>2]|0;if(p>>>0>=10){o=10;do{o=o*10|0;m=m+1|0}while(p>>>0>=o>>>0)}}else n=s}else n=s;n=n+4|0;n=g>>>0>n>>>0?n:g;x=j}else{n=g;x=j}w=n;while(1){if(w>>>0<=x>>>0){u=0;break}j=w+-4|0;if(!(c[j>>2]|0))w=j;else{u=1;break}}g=0-m|0;do if(t){j=k+((v^1)&1)|0;if((j|0)>(m|0)&(m|0)>-5){o=i+-1|0;k=j+-1-m|0}else{o=i+-2|0;k=j+-1|0}j=h&8;if(!j){if(u?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){n=0;j=10;do{j=j*10|0;n=n+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else n=0;else n=9;j=((w-y>>2)*9|0)+-9|0;if((o|32|0)==102){s=j-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}else{s=j+m-n|0;s=(s|0)>0?s:0;k=(k|0)<(s|0)?k:s;s=0;break}}else s=j}else{o=i;s=h&8}while(0);t=k|s;p=(t|0)!=0&1;q=(o|32|0)==102;if(q){v=0;j=(m|0)>0?m:0}else{j=(m|0)<0?g:m;j=C8(j,((j|0)<0)<<31>>31,E)|0;n=E;if((n-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((n-j|0)<2);a[j+-1>>0]=(m>>31&2)+43;j=j+-2|0;a[j>>0]=o;v=j;j=n-j|0}j=C+1+k+p+j|0;E8(b,32,f,j,h);x8(b,B,C);E8(b,48,f,j,h^65536);if(q){o=x>>>0>D>>>0?D:x;s=G+9|0;p=s;q=G+8|0;n=o;do{m=C8(c[n>>2]|0,0,s)|0;if((n|0)==(o|0)){if((m|0)==(s|0)){a[q>>0]=48;m=q}}else if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,p-m|0);n=n+4|0}while(n>>>0<=D>>>0);if(t|0)x8(b,39995,1);if(n>>>0>>0&(k|0)>0)while(1){m=C8(c[n>>2]|0,0,s)|0;if(m>>>0>G>>>0){$aa(G|0,48,m-F|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}x8(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}E8(b,48,k+9|0,9,0)}else{t=u?w:x+4|0;if((k|0)>-1){u=G+9|0;s=(s|0)==0;g=u;p=0-F|0;q=G+8|0;o=x;do{m=C8(c[o>>2]|0,0,u)|0;if((m|0)==(u|0)){a[q>>0]=48;m=q}do if((o|0)==(x|0)){n=m+1|0;x8(b,m,1);if(s&(k|0)<1){m=n;break}x8(b,39995,1);m=n}else{if(m>>>0<=G>>>0)break;$aa(G|0,48,m+p|0)|0;do m=m+-1|0;while(m>>>0>G>>>0)}while(0);F=g-m|0;x8(b,m,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}E8(b,48,k+18|0,18,0);x8(b,v,E-v|0)}E8(b,32,f,j,h^8192)}while(0);l=H;return ((j|0)<(f|0)?f:j)|0}function H8(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function I8(a,b){a=+a;b=b|0;return +(+J8(a,b))}function J8(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=Waa(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+J8(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function K8(b,d,e){b=b|0;d=d|0;e=e|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[c[(L8()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[(N7()|0)>>2]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[(N7()|0)>>2]=84;b=-1;break}}else b=1;while(0);return b|0}function L8(){return d8()|0}function M8(){return d8()|0}function N8(b,e){b=b|0;e=e|0;var f=0,g=0;g=0;while(1){if((d[39997+g>>0]|0)==(b|0)){b=2;break}f=g+1|0;if((f|0)==87){f=40085;g=87;b=5;break}else g=f}if((b|0)==2)if(!g)f=40085;else{f=40085;b=5}if((b|0)==5)while(1){do{b=f;f=f+1|0}while((a[b>>0]|0)!=0);g=g+-1|0;if(!g)break;else b=5}return O8(f,c[e+20>>2]|0)|0}function O8(a,b){a=a|0;b=b|0;return P8(a,b)|0}function P8(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Q8(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Q8(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=R8(c[b+8>>2]|0,o)|0;f=R8(c[b+12>>2]|0,o)|0;g=R8(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=R8(c[b+(g<<2)>>2]|0,o)|0;g=R8(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=S8(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}else{l=f?l:k;h=f?j:h-j|0}}f=i+m|0;g=R8(c[b+(f<<2)>>2]|0,o)|0;f=R8(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 R8(a,b){a=a|0;b=b|0;var c=0;c=Yaa(a|0)|0;return ((b|0)==0?a:c)|0}function S8(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 T8(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=e+16|0;g=c[f>>2]|0;if(!g)if(!(U8(e)|0)){g=c[f>>2]|0;h=5}else f=0;else h=5;a:do if((h|0)==5){j=e+20|0;i=c[j>>2]|0;f=i;if((g-i|0)>>>0>>0){f=Od[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){i=d;while(1){if(!i){h=0;g=b;break b}g=i+-1|0;if((a[b+g>>0]|0)==10)break;else i=g}f=Od[c[e+36>>2]&63](e,b,i)|0;if(f>>>0>>0)break a;h=i;g=b+i|0;d=d-i|0;f=c[j>>2]|0}else{h=0;g=b}while(0);Zaa(f|0,g|0,d|0)|0;c[j>>2]=(c[j>>2]|0)+d;f=h+d|0}while(0);return f|0}function U8(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;e=c[b+44>>2]|0;c[b+28>>2]=e;c[b+20>>2]=e;c[b+16>>2]=e+(c[b+48>>2]|0);b=0}else{c[b>>2]=d|32;b=-1}return b|0}function V8(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;Zaa(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function W8(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;k=l;l=l+16|0;g=k;i=(f|0)==0?58580:f;f=c[i>>2]|0;a:do if(!d)if(!f)f=0;else j=17;else{h=(b|0)==0?g:b;if(!e)f=-2;else{if(!f){f=a[d>>0]|0;if(f<<24>>24>-1){c[h>>2]=f&255;f=f<<24>>24!=0&1;break}g=(c[c[(X8()|0)+188>>2]>>2]|0)==0;f=a[d>>0]|0;if(g){c[h>>2]=f<<24>>24&57343;f=1;break}f=(f&255)+-194|0;if(f>>>0>50){j=17;break}f=c[3984+(f<<2)>>2]|0;g=e+-1|0;if(g){d=d+1|0;j=11}}else{g=e;j=11}b:do if((j|0)==11){b=a[d>>0]|0;m=(b&255)>>>3;if((m+-16|m+(f>>26))>>>0>7){j=17;break a}while(1){d=d+1|0;f=(b&255)+-128|f<<6;g=g+-1|0;if((f|0)>=0)break;if(!g)break b;b=a[d>>0]|0;if((b&-64)<<24>>24!=-128){j=17;break a}}c[i>>2]=0;c[h>>2]=f;f=e-g|0;break a}while(0);c[i>>2]=f;f=-2}}while(0);if((j|0)==17){c[i>>2]=0;c[(N7()|0)>>2]=84;f=-1}l=k;return f|0}function X8(){return d8()|0}function Y8(a){a=a|0;return (a+-32|0)>>>0<95|0}function Z8(b,e,f){b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(e|0){case 0:{l=-149;m=24;j=4;break}case 1:{l=-1074;m=53;j=4;break}case 2:{l=-1074;m=53;j=4;break}default:g=0.0}a:do if((j|0)==4){o=b+4|0;n=b+100|0;do{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0}while(($7(e)|0)!=0);b:do switch(e|0){case 43:case 45:{i=1-(((e|0)==45&1)<<1)|0;e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;h=d[e>>0]|0;break b}else{h=k8(b)|0;break b}}default:{h=e;i=1}}while(0);e=0;do{if((h|32|0)!=(a[41889+e>>0]|0))break;do if(e>>>0<7){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<8);c:do switch(e|0){case 8:break;case 3:{j=23;break}default:{k=(f|0)!=0;if(k&e>>>0>3)if((e|0)==8)break c;else{j=23;break c}d:do if(!e){e=0;do{if((h|32|0)!=(a[41898+e>>0]|0))break d;do if(e>>>0<2){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0;break}else{h=k8(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}while(0);switch(e|0){case 3:{e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|0)==40)e=1;else{if(!(c[n>>2]|0)){g=s;break a}c[o>>2]=(c[o>>2]|0)+-1;g=s;break a}while(1){h=c[o>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[o>>2]=h+1;h=d[h>>0]|0}else h=k8(b)|0;if(!((h+-48|0)>>>0<10|(h+-65|0)>>>0<26)?!((h|0)==95|(h+-97|0)>>>0<26):0)break;e=e+1|0}if((h|0)==41){g=s;break a}h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!k){c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}if(!e){g=s;break a}while(1){e=e+-1|0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if(!e){g=s;break a}}}case 0:{if((h|0)==48){e=c[o>>2]|0;if(e>>>0<(c[n>>2]|0)>>>0){c[o>>2]=e+1;e=d[e>>0]|0}else e=k8(b)|0;if((e|32|0)==120){g=+_8(b,m,l,i,f);break a}if(!(c[n>>2]|0))e=48;else{c[o>>2]=(c[o>>2]|0)+-1;e=48}}else e=h;g=+$8(b,e,m,l,i,f);break a}default:{if(c[n>>2]|0)c[o>>2]=(c[o>>2]|0)+-1;c[(N7()|0)>>2]=22;i8(b,0);g=0.0;break a}}}}while(0);if((j|0)==23){h=(c[n>>2]|0)==0;if(!h)c[o>>2]=(c[o>>2]|0)+-1;if((f|0)!=0&e>>>0>3)do{if(!h)c[o>>2]=(c[o>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}g=+(i|0)*t}while(0);return +g}function _8(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.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;y=a+4|0;i=c[y>>2]|0;x=a+100|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=0}else{j=k8(a)|0;l=0}a:while(1){switch(j|0){case 46:{w=8;break a}case 48:break;default:{s=0;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0;break a}}i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0;l=1;continue}else{j=k8(a)|0;l=1;continue}}if((w|0)==8){i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;j=d[i>>0]|0}else j=k8(a)|0;if((j|0)==48){l=0;j=0;do{i=c[y>>2]|0;if(i>>>0<(c[x>>2]|0)>>>0){c[y>>2]=i+1;m=d[i>>0]|0}else m=k8(a)|0;l=Qaa(l|0,j|0,-1,-1)|0;j=z}while((m|0)==48);s=1;n=0;o=1.0;h=0.0;i=0;t=1;v=0;u=0}else{s=1;n=0;o=1.0;h=0.0;i=0;m=j;t=l;v=0;u=0;l=0;j=0}}while(1){q=m+-48|0;p=m|32;if(q>>>0>=10){r=(m|0)==46;if(!(r|(p+-97|0)>>>0<6))break;if(r)if(!s){s=1;k=o;r=t;l=u;j=v;q=u;p=v}else{m=46;break}else w=20}else w=20;if((w|0)==20){w=0;m=(m|0)>57?p+-87|0:q;do if(!((v|0)<0|(v|0)==0&u>>>0<8))if((v|0)<0|(v|0)==0&u>>>0<14){o=o*.0625;k=o;h=h+o*+(m|0);break}else{t=(n|0)!=0|(m|0)==0;n=t?n:1;k=o;h=t?h:h+o*.5;break}else{k=o;i=m+(i<<4)|0}while(0);q=Qaa(u|0,v|0,1,0)|0;r=1;p=z}m=c[y>>2]|0;if(m>>>0<(c[x>>2]|0)>>>0){c[y>>2]=m+1;o=k;m=d[m>>0]|0;t=r;v=p;u=q;continue}else{o=k;m=k8(a)|0;t=r;v=p;u=q;continue}}do if(!t){i=(c[x>>2]|0)==0;if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(g){if(!i)c[y>>2]=(c[y>>2]|0)+-1;if(!((s|0)==0|i))c[y>>2]=(c[y>>2]|0)+-1}else i8(a,0);h=+(f|0)*0.0}else{p=(s|0)==0;q=p?u:l;p=p?v:j;if((v|0)<0|(v|0)==0&u>>>0<8){l=u;j=v;while(1){i=i<<4;w=l;l=Qaa(l|0,j|0,1,0)|0;if(!((j|0)<0|(j|0)==0&w>>>0<7)){n=i;break}else j=z}}else n=i;if((m|32|0)==112){j=a9(a,g)|0;i=z;if((j|0)==0&(i|0)==-2147483648){if(!g){i8(a,0);h=0.0;break}if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}}}else if(!(c[x>>2]|0)){j=0;i=0}else{c[y>>2]=(c[y>>2]|0)+-1;j=0;i=0}l=Xaa(q|0,p|0,2)|0;l=Qaa(l|0,z|0,-32,-1)|0;l=Qaa(l|0,z|0,j|0,i|0)|0;i=z;if(!n){h=+(f|0)*0.0;break}y=0-e|0;g=((y|0)<0)<<31>>31;if((i|0)>(g|0)|(i|0)==(g|0)&l>>>0>y>>>0){c[(N7()|0)>>2]=34;h=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}y=e+-106|0;g=((y|0)<0)<<31>>31;if((i|0)<(g|0)|(i|0)==(g|0)&l>>>0>>0){c[(N7()|0)>>2]=34;h=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((n|0)>-1){j=n;do{y=!(h>=.5);j=j<<1|(y^1)&1;h=h+(y?h:h+-1.0);l=Qaa(l|0,i|0,-1,-1)|0;i=z}while((j|0)>-1);o=h;m=j}else{o=h;m=n}y=((b|0)<0)<<31>>31;e=Raa(32,0,e|0,((e|0)<0)<<31>>31|0)|0;i=Qaa(e|0,z|0,l|0,i|0)|0;e=z;if((e|0)<(y|0)|(e|0)==(y|0)&i>>>0>>0)if((i|0)>0)w=59;else{j=0;i=84;w=61}else{i=b;w=59}if((w|0)==59)if((i|0)<53){j=i;i=84-i|0;w=61}else{k=0.0;h=+(f|0)}if((w|0)==61){h=+(f|0);k=+c9(+b9(1.0,i),h);i=j}f=(m&1|0)==0&(o!=0.0&(i|0)<32);h=(f?0.0:o)*h+(k+h*+((m+(f&1)|0)>>>0))-k;if(!(h!=0.0))c[(N7()|0)>>2]=34;h=+e9(h,l)}while(0);return +h}function $8(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.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0;J=l;l=l+512|0;G=J;H=f+e|0;I=0-H|0;D=a+4|0;E=a+100|0;k=0;a:while(1){switch(b|0){case 46:{A=6;break a}case 48:break;default:{v=0;p=k;q=0;o=0;break a}}b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0;k=1;continue}else{b=k8(a)|0;k=1;continue}}if((A|0)==6){b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48){k=0;b=0;while(1){k=Qaa(k|0,b|0,-1,-1)|0;o=z;b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;if((b|0)==48)b=o;else{v=1;p=1;q=k;break}}}else{v=1;p=k;q=0;o=0}}c[G>>2]=0;n=b+-48|0;m=(b|0)==46;b:do if(m|n>>>0<10){C=G+496|0;w=0;k=0;u=0;x=v;y=p;A=n;p=0;n=0;c:while(1){do if(m)if(!x){x=1;q=p;o=n}else break c;else{p=Qaa(p|0,n|0,1,0)|0;n=z;v=(b|0)!=48;if((k|0)>=125){if(!v)break;c[C>>2]=c[C>>2]|1;break}m=G+(k<<2)|0;if(!w)b=A;else b=b+-48+((c[m>>2]|0)*10|0)|0;c[m>>2]=b;w=w+1|0;y=(w|0)==9;w=y?0:w;k=k+(y&1)|0;u=v?p:u;y=1}while(0);b=c[D>>2]|0;if(b>>>0<(c[E>>2]|0)>>>0){c[D>>2]=b+1;b=d[b>>0]|0}else b=k8(a)|0;A=b+-48|0;m=(b|0)==46;if(!(m|A>>>0<10)){v=x;m=y;A=29;break b}}b=w;m=(y|0)!=0;A=37}else{w=0;k=0;u=0;m=p;p=0;n=0;A=29}while(0);do if((A|0)==29){C=(v|0)==0;q=C?p:q;o=C?n:o;m=(m|0)!=0;if(!(m&(b|32|0)==101))if((b|0)>-1){b=w;A=37;break}else{b=w;A=39;break}m=a9(a,h)|0;b=z;if((m|0)==0&(b|0)==-2147483648){if(!h){i8(a,0);i=0.0;break}if(!(c[E>>2]|0)){m=0;b=0}else{c[D>>2]=(c[D>>2]|0)+-1;m=0;b=0}}y=Qaa(m|0,b|0,q|0,o|0)|0;b=w;o=z;A=41}while(0);if((A|0)==37)if(c[E>>2]|0){c[D>>2]=(c[D>>2]|0)+-1;if(m){y=q;A=41}else A=40}else A=39;if((A|0)==39)if(m){y=q;A=41}else A=40;do if((A|0)==40){c[(N7()|0)>>2]=22;i8(a,0);i=0.0}else if((A|0)==41){m=c[G>>2]|0;if(!m){i=+(g|0)*0.0;break}if(((n|0)<0|(n|0)==0&p>>>0<10)&((y|0)==(p|0)&(o|0)==(n|0))?(e|0)>30|(m>>>e|0)==0:0){i=+(g|0)*+(m>>>0);break}a=(f|0)/-2|0;E=((a|0)<0)<<31>>31;if((o|0)>(E|0)|(o|0)==(E|0)&y>>>0>a>>>0){c[(N7()|0)>>2]=34;i=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;E=((a|0)<0)<<31>>31;if((o|0)<(E|0)|(o|0)==(E|0)&y>>>0>>0){c[(N7()|0)>>2]=34;i=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(b){if((b|0)<9){n=G+(k<<2)|0;m=c[n>>2]|0;while(1){m=m*10|0;if((b|0)>=8)break;else b=b+1|0}c[n>>2]=m}k=k+1|0}if((u|0)<9?(u|0)<=(y|0)&(y|0)<18:0){if((y|0)==9){i=+(g|0)*+((c[G>>2]|0)>>>0);break}if((y|0)<9){i=+(g|0)*+((c[G>>2]|0)>>>0)/+(c[4556+(8-y<<2)>>2]|0);break}a=e+27+(O(y,-3)|0)|0;b=c[G>>2]|0;if((a|0)>30|(b>>>a|0)==0){i=+(g|0)*+(b>>>0)*+(c[4556+(y+-10<<2)>>2]|0);break}}b=(y|0)%9|0;if(!b){b=0;n=0}else{u=(y|0)>-1?b:b+9|0;p=c[4556+(8-u<<2)>>2]|0;if(k){q=1e9/(p|0)|0;n=0;o=0;m=y;b=0;do{D=G+(b<<2)|0;E=c[D>>2]|0;a=((E>>>0)/(p>>>0)|0)+n|0;c[D>>2]=a;n=O(q,(E>>>0)%(p>>>0)|0)|0;a=(b|0)==(o|0)&(a|0)==0;m=a?m+-9|0:m;o=a?o+1&127:o;b=b+1|0}while((b|0)!=(k|0));if(!n)n=o;else{c[G+(k<<2)>>2]=n;n=o;k=k+1|0}}else{n=0;k=0;m=y}b=0;y=9-u+m|0}d:while(1){u=(y|0)<18;v=(y|0)==18;w=G+(n<<2)|0;while(1){if(!u){if(!v){m=y;break d}if((c[w>>2]|0)>>>0>=9007199){m=18;break d}}m=0;x=k;k=k+127|0;while(1){o=k&127;p=G+(o<<2)|0;k=Xaa(c[p>>2]|0,0,29)|0;k=Qaa(k|0,z|0,m|0,0)|0;m=z;if(m>>>0>0|(m|0)==0&k>>>0>1e9){q=Uaa(k|0,m|0,1e9,0)|0;k=Vaa(k|0,m|0,1e9,0)|0}else q=0;c[p>>2]=k;a=(o|0)==(n|0);x=(k|0)==0&(((o|0)!=(x+127&127|0)|a)^1)?o:x;if(a)break;else{m=q;k=o+-1|0}}b=b+-29|0;if(q|0)break;else k=x}n=n+127&127;k=x+127&127;m=G+((x+126&127)<<2)|0;if((n|0)==(x|0))c[m>>2]=c[m>>2]|c[G+(k<<2)>>2];else k=x;c[G+(n<<2)>>2]=q;y=y+9|0}e:while(1){w=k+1&127;x=G+((k+127&127)<<2)|0;while(1){q=(m|0)==18;v=(m|0)>27?9:1;y=n;while(1){p=0;while(1){n=p+y&127;if((n|0)==(k|0)){F=2;A=88;break}n=c[G+(n<<2)>>2]|0;o=c[4588+(p<<2)>>2]|0;if(n>>>0>>0){F=2;A=88;break}if(n>>>0>o>>>0)break;n=p+1|0;if((p|0)<1)p=n;else{F=n;A=88;break}}if((A|0)==88?(A=0,q&(F|0)==2):0){i=0.0;o=0;break e}b=v+b|0;if((y|0)==(k|0))y=k;else break}q=(1<>>v;p=0;n=y;o=y;do{D=G+(o<<2)|0;E=c[D>>2]|0;a=(E>>>v)+p|0;c[D>>2]=a;p=O(E&q,u)|0;a=(o|0)==(n|0)&(a|0)==0;m=a?m+-9|0:m;n=a?n+1&127:n;o=o+1&127}while((o|0)!=(k|0));if(!p)continue;if((w|0)!=(n|0))break;c[x>>2]=c[x>>2]|1}c[G+(k<<2)>>2]=p;k=w}do{n=o+y&127;m=k+1&127;if((n|0)==(k|0)){c[G+(m+-1<<2)>>2]=0;k=m}i=i*1.0e9+ +((c[G+(n<<2)>>2]|0)>>>0);o=o+1|0}while((o|0)!=2);t=+(g|0);j=i*t;o=b+53|0;p=o-f|0;q=(p|0)<(e|0);n=q?((p|0)>0?p:0):e;if((n|0)<53){K=+c9(+b9(1.0,105-n|0),j);r=+d9(j,+b9(1.0,53-n|0));s=K;i=r;r=K+(j-r)}else{s=0.0;i=0.0;r=j}m=y+2&127;if((m|0)!=(k|0)){m=c[G+(m<<2)>>2]|0;do if(m>>>0>=5e8){if((m|0)!=5e8){i=t*.75+i;break}if((y+3&127|0)==(k|0)){i=t*.5+i;break}else{i=t*.75+i;break}}else{if((m|0)==0?(y+3&127|0)==(k|0):0)break;i=t*.25+i}while(0);if((53-n|0)>1?!(+d9(i,1.0)!=0.0):0)j=i+1.0;else j=i}else j=i;i=r+j-s;do if((o&2147483647|0)>(-2-H|0)){H=!(+B(+i)>=9007199254740992.0);b=b+((H^1)&1)|0;i=H?i:i*.5;if((b+50|0)<=(I|0)?!(j!=0.0&(q&((n|0)!=(p|0)|H))):0)break;c[(N7()|0)>>2]=34}while(0);i=+e9(i,b)}while(0);l=J;return +i}function a9(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0;h=a+4|0;e=c[h>>2]|0;i=a+100|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;switch(e|0){case 43:case 45:{f=(e|0)==45&1;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0;if((b|0)!=0&(e+-48|0)>>>0>9?(c[i>>2]|0)!=0:0)c[h>>2]=(c[h>>2]|0)+-1;break}default:f=0}if((e+-48|0)>>>0>9)if(!(c[i>>2]|0)){f=-2147483648;e=0}else{c[h>>2]=(c[h>>2]|0)+-1;f=-2147483648;e=0}else{g=0;do{g=e+-48+(g*10|0)|0;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&(g|0)<214748364);b=((g|0)<0)<<31>>31;if((e+-48|0)>>>0<10)do{b=Paa(g|0,b|0,10,0)|0;g=z;e=Qaa(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;g=Qaa(e|0,z|0,b|0,g|0)|0;b=z;e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10&((b|0)<21474836|(b|0)==21474836&g>>>0<2061584302));if((e+-48|0)>>>0<10)do{e=c[h>>2]|0;if(e>>>0<(c[i>>2]|0)>>>0){c[h>>2]=e+1;e=d[e>>0]|0}else e=k8(a)|0}while((e+-48|0)>>>0<10);if(c[i>>2]|0)c[h>>2]=(c[h>>2]|0)+-1;i=(f|0)!=0;e=Raa(0,0,g|0,b|0)|0;f=i?z:b;e=i?e:g}z=f;return e|0}function b9(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;e=(b|0)<-2044;d=b+2044|0;a=e?a*2.2250738585072014e-308:a;b=e?((d|0)>-1022?d:-1022):b+1022|0}}else{a=a*8988465674311579538646525.0e283;d=(b|0)>2046;e=b+-2046|0;a=d?a*8988465674311579538646525.0e283:a;b=d?((e|0)<1023?e:1023):b+-1023|0}d=Xaa(b+1023|0,0,52)|0;e=z;c[j>>2]=d;c[j+4>>2]=e;return +(a*+h[j>>3])}function c9(a,b){a=+a;b=+b;return +(+h9(a,b))}function d9(a,b){a=+a;b=+b;return +(+f9(a,b))}function e9(a,b){a=+a;b=b|0;return +(+b9(a,b))}function f9(a,b){a=+a;b=+b;var d=0,e=0,f=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h[j>>3]=a;i=c[j>>2]|0;l=c[j+4>>2]|0;h[j>>3]=b;n=c[j>>2]|0;o=c[j+4>>2]|0;e=Waa(i|0,l|0,52)|0;e=e&2047;m=Waa(n|0,o|0,52)|0;m=m&2047;p=l&-2147483648;g=Xaa(n|0,o|0,1)|0;k=z;a:do if(!((g|0)==0&(k|0)==0)?(f=g9(b)|0,d=z&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=Xaa(i|0,l|0,1)|0;f=z;if(!(f>>>0>k>>>0|(f|0)==(k|0)&d>>>0>g>>>0))return +((d|0)==(g|0)&(f|0)==(k|0)?a*0.0:a);if(!e){d=Xaa(i|0,l|0,12)|0;f=z;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){e=0;do{e=e+-1|0;d=Xaa(d|0,f|0,1)|0;f=z}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;i=Xaa(i|0,l|0,1-e|0)|0;g=z}else g=l&1048575|1048576;if(!m){f=Xaa(n|0,o|0,12)|0;k=z;if((k|0)>-1|(k|0)==-1&f>>>0>4294967295){d=0;do{d=d+-1|0;f=Xaa(f|0,k|0,1)|0;k=z}while((k|0)>-1|(k|0)==-1&f>>>0>4294967295)}else d=0;n=Xaa(n|0,o|0,1-d|0)|0;m=d;l=z}else l=o&1048575|1048576;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(k){if((f|0)==0&(d|0)==0)break}else{f=i;d=g}i=Xaa(f|0,d|0,1)|0;g=z;e=e+-1|0;f=Raa(i|0,g|0,n|0,l|0)|0;d=z;k=(d|0)>-1|(d|0)==-1&f>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(k){if((f|0)==0&(d|0)==0){b=a*0.0;break}}else{d=g;f=i}if(d>>>0<1048576|(d|0)==1048576&f>>>0<0)do{f=Xaa(f|0,d|0,1)|0;d=z;e=e+-1|0}while(d>>>0<1048576|(d|0)==1048576&f>>>0<0);if((e|0)>0){o=Qaa(f|0,d|0,0,-1048576)|0;d=z;e=Xaa(e|0,0,52)|0;d=d|z;e=o|e}else{e=Waa(f|0,d|0,1-e|0)|0;d=z}c[j>>2]=e;c[j+4>>2]=d|p;b=+h[j>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function g9(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function h9(a,b){a=+a;b=+b;var d=0,e=0;h[j>>3]=a;e=c[j>>2]|0;d=c[j+4>>2]|0;h[j>>3]=b;d=c[j+4>>2]&-2147483648|d&2147483647;c[j>>2]=e;c[j+4>>2]=d;return +(+h[j>>3])}function i9(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;h=(g[j>>2]=a,c[j>>2]|0);k=(g[j>>2]=b,c[j>>2]|0);d=h>>>23&255;i=k>>>23&255;l=h&-2147483648;f=k<<1;a:do if((f|0)!=0?!((d|0)==255|((j9(b)|0)&2147483647)>>>0>2139095040):0){e=h<<1;if(e>>>0<=f>>>0)return +((e|0)==(f|0)?a*0.0:a);if(!d){d=h<<9;if((d|0)>-1){e=d;d=0;do{d=d+-1|0;e=e<<1}while((e|0)>-1)}else d=0;e=h<<1-d}else e=h&8388607|8388608;if(!i){h=k<<9;if((h|0)>-1){f=0;do{f=f+-1|0;h=h<<1}while((h|0)>-1)}else f=0;i=f;k=k<<1-f}else k=k&8388607|8388608;f=e-k|0;h=(f|0)>-1;b:do if((d|0)>(i|0)){while(1){if(h)if(!f)break;else e=f;e=e<<1;d=d+-1|0;f=e-k|0;h=(f|0)>-1;if((d|0)<=(i|0))break b}b=a*0.0;break a}while(0);if(h)if(!f){b=a*0.0;break}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l,+g[j>>2])}else m=3;while(0);if((m|0)==3){b=a*b;b=b/b}return +b}function j9(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function k9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;if((c[a+76>>2]|0)>-1)f=r8(a)|0;else f=0;l9(a);g=(c[a>>2]&1|0)!=0;if(!g){e=m9()|0;d=c[a+52>>2]|0;b=a+56|0;if(d|0)c[d+56>>2]=c[b>>2];b=c[b>>2]|0;if(b|0)c[b+52>>2]=d;if((c[e>>2]|0)==(a|0))c[e>>2]=b;n9()}b=o9(a)|0;b=Cd[c[a+12>>2]&63](a)|0|b;d=c[a+92>>2]|0;if(d|0)E7(d);if(g){if(f|0)s8(a)}else E7(a);return b|0}function l9(a){a=a|0;var b=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;a=a+112|0;if(b|0)c[b+112>>2]=c[a>>2];a=c[a>>2]|0;if(!a)a=(q9()|0)+232|0;else a=a+116|0;c[a>>2]=b}return}function m9(){Gb(58584);return 58592}function n9(){Qb(58584);return}function o9(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=p9(a)|0;break}d=(r8(a)|0)==0;b=p9(a)|0;if(!d)s8(a)}else{if(!(c[963]|0))b=0;else b=o9(c[963]|0)|0;a=c[(m9()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=r8(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=p9(a)|0|b;if(d|0)s8(a);a=c[a+56>>2]|0}while((a|0)!=0);n9()}while(0);return b|0}function p9(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0>>0)Od[c[a+40>>2]&63](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function q9(){return d8()|0}function r9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;n=o+40|0;k=o+24|0;j=o+16|0;g=o;m=o+56|0;f=a[d>>0]|0;if(R7(41902,f<<24>>24,4)|0){e=D7(1156)|0;if(!e)e=0;else{h=e;i=h+124|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!(e8(d,43)|0))c[e>>2]=f<<24>>24==114?8:4;if(e8(d,101)|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0;f=a[d>>0]|0}if(f<<24>>24==97){c[j>>2]=b;c[j+4>>2]=3;f=Mb(221,j|0)|0;if(!(f&1024)){c[k>>2]=b;c[k+4>>2]=4;c[k+8>>2]=f|1024;Mb(221,k|0)|0}d=c[e>>2]|128;c[e>>2]=d}else d=c[e>>2]|0;c[e+60>>2]=b;c[e+44>>2]=e+132;c[e+48>>2]=1024;f=e+75|0;a[f>>0]=-1;if((d&8|0)==0?(c[n>>2]=b,c[n+4>>2]=21523,c[n+8>>2]=m,(Ob(54,n|0)|0)==0):0)a[f>>0]=10;c[e+32>>2]=45;c[e+36>>2]=3;c[e+40>>2]=2;c[e+12>>2]=1;if(!(c[14629]|0))c[e+76>>2]=-1;s9(e)|0}}else{c[(N7()|0)>>2]=22;e=0}l=o;return e|0}function s9(a){a=a|0;var b=0,d=0;b=m9()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;n9();return a|0}function t9(a){a=a|0;var b=0,c=0;c=(c8(a)|0)+1|0;b=D7(c)|0;if(!b)b=0;else Zaa(b|0,a|0,c|0)|0;return b|0}function u9(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=O(d,b)|0;d=(b|0)==0?0:d;if((c[e+76>>2]|0)>-1){g=(r8(e)|0)==0;a=T8(a,f,e)|0;if(!g)s8(e)}else a=T8(a,f,e)|0;if((a|0)!=(f|0))d=(a>>>0)/(b>>>0)|0;return d|0}function v9(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;j=m;k=e&255;a[j>>0]=k;g=b+16|0;h=c[g>>2]|0;if(!h)if(!(U8(b)|0)){h=c[g>>2]|0;i=4}else f=-1;else i=4;do if((i|0)==4){i=b+20|0;g=c[i>>2]|0;if(g>>>0>>0?(f=e&255,(f|0)!=(a[b+75>>0]|0)):0){c[i>>2]=g+1;a[g>>0]=k;break}if((Od[c[b+36>>2]&63](b,j,1)|0)==1)f=d[j>>0]|0;else f=-1}while(0);l=m;return f|0}function w9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=l;l=l+48|0;h=i+32|0;g=i+16|0;e=i;if(R7(41902,a[d>>0]|0,4)|0){f=x9(d)|0;c[e>>2]=b;c[e+4>>2]=f|32768;c[e+8>>2]=438;e=M7(Nb(5,e|0)|0)|0;if((e|0)>=0){if(f&524288|0){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;Mb(221,g|0)|0}b=r9(e,d)|0;if(!b){c[h>>2]=e;Pb(6,h|0)|0;b=0}}else b=0}else{c[(N7()|0)>>2]=22;b=0}l=i;return b|0}function x9(b){b=b|0;var c=0,d=0,e=0;d=(e8(b,43)|0)==0;c=a[b>>0]|0;d=d?c<<24>>24!=114&1:2;e=(e8(b,120)|0)==0;d=e?d:d|128;b=(e8(b,101)|0)==0;b=b?d:d|524288;b=c<<24>>24==114?b:b|64;b=c<<24>>24==119?b|512:b;return (c<<24>>24==97?b|1024:b)|0}function y9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;d=z9(a,b,f)|0;l=e;return d|0}function z9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=l;l=l+128|0;e=g;f=e;h=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[e+32>>2]=46;c[e+44>>2]=a;c[e+76>>2]=-1;c[e+84>>2]=a;h=B9(e,b,d)|0;l=g;return h|0}function A9(a,b,c){a=a|0;b=b|0;c=c|0;return F9(a,b,c)|0}function B9(b,e,f){b=b|0;e=e|0;f=f|0;var i=0,j=0,k=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,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=l;l=l+288|0;J=P+8|0;K=P+17|0;L=P;M=P+16|0;if((c[b+76>>2]|0)>-1)O=r8(b)|0;else O=0;i=a[e>>0]|0;a:do if(i<<24>>24){B=b+4|0;C=b+100|0;D=b+108|0;E=b+8|0;F=K+10|0;G=K+33|0;A=J+4|0;H=K+1|0;I=K+1|0;m=e;t=0;e=0;k=0;j=0;b:while(1){c:do if(!($7(i&255)|0)){i=i<<24>>24==37;d:do if(i){p=m+1|0;n=a[p>>0]|0;e:do switch(n<<24>>24){case 37:break d;case 42:{y=0;m=m+2|0;break}default:{i=(n&255)+-48|0;if(i>>>0<10?(a[m+2>>0]|0)==36:0){y=C9(f,i)|0;m=m+3|0;break e}m=(c[f>>2]|0)+(4-1)&~(4-1);y=c[m>>2]|0;c[f>>2]=m+4;m=p}}while(0);i=a[m>>0]|0;n=i&255;if((n+-48|0)>>>0<10){p=0;do{p=(p*10|0)+-48+n|0;m=m+1|0;i=a[m>>0]|0;n=i&255}while((n+-48|0)>>>0<10)}else p=0;i=i<<24>>24==109;x=(y|0)!=0;k=i?0:k;j=i?0:j;m=i?m+1|0:m;i=x&i;n=m+1|0;switch(a[m>>0]|0){case 104:{w=(a[n>>0]|0)==104;q=w?-2:-1;m=w?m+2|0:n;break}case 108:{w=(a[n>>0]|0)==108;q=w?3:1;m=w?m+2|0:n;break}case 106:{q=3;m=n;break}case 116:case 122:{q=1;m=n;break}case 76:{q=2;m=n;break}case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{q=0;break}default:{N=135;break b}}s=d[m>>0]|0;u=(s&47|0)==3;s=u?s|32:s;u=u?1:q;r=s&255;switch(r<<24>>24){case 99:{p=(p|0)>1?p:1;w=t;break}case 91:{w=t;break}case 110:{D9(y,u,t,((t|0)<0)<<31>>31);n=t;break c}default:{i8(b,0);do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0}while(($7(n)|0)!=0);if(!(c[C>>2]|0))n=c[B>>2]|0;else{n=(c[B>>2]|0)+-1|0;c[B>>2]=n}w=(c[D>>2]|0)+t+n-(c[E>>2]|0)|0}}i8(b,p);n=c[B>>2]|0;q=c[C>>2]|0;if(n>>>0>>0)c[B>>2]=n+1;else{if((k8(b)|0)<0){N=135;break b}q=c[C>>2]|0}if(q|0)c[B>>2]=(c[B>>2]|0)+-1;f:do switch(r<<24>>24){case 91:case 99:case 115:{v=(s|0)==99;g:do if((s|16|0)==115){$aa(H|0,-1,256)|0;a[K>>0]=0;if((s|0)==115){a[G>>0]=0;a[F>>0]=0;a[F+1>>0]=0;a[F+2>>0]=0;a[F+3>>0]=0;a[F+4>>0]=0}}else{s=m+1|0;n=(a[s>>0]|0)==94;t=n&1;m=n?m+2|0:s;$aa(I|0,n&1|0,256)|0;a[K>>0]=0;n=a[m>>0]|0;switch(n<<24>>24){case 45:{n=46;N=63;break}case 93:{n=94;N=63;break}default:{}}while(1){if((N|0)==63){N=0;a[K+n>>0]=t^1;n=m+1|0;m=n;n=a[n>>0]|0}h:do switch(n<<24>>24){case 0:{N=135;break b}case 93:break g;case 45:{s=m+1|0;n=a[s>>0]|0;switch(n<<24>>24){case 93:case 0:{n=45;break h}default:{}}m=a[m+-1>>0]|0;if((m&255)<(n&255)){r=(t^1)&255;m=m&255;do{m=m+1|0;a[K+m>>0]=r;n=a[s>>0]|0}while((m|0)<(n&255|0));m=s}else m=s;break}default:{}}while(0);n=(n&255)+1|0;N=63}}while(0);n=v?p+1|0:31;s=(u|0)==1;i:do if(s){if(i){j=D7(n<<2)|0;if(!j){k=0;j=0;i=1;N=135;break b}}else j=y;c[J>>2]=0;c[A>>2]=0;r=n;k=0;j:while(1){q=(j|0)==0;do{k:while(1){n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0))break j;a[M>>0]=n;switch(W8(L,M,1,J)|0){case -1:{k=0;N=135;break b}case -2:break;default:break k}}if(!q){c[j+(k<<2)>>2]=c[L>>2];k=k+1|0}}while(!(i&(k|0)==(r|0)));k=r<<1|1;n=F7(j,k<<2)|0;if(!n){k=0;i=1;N=135;break b}else{u=r;r=k;j=n;k=u}}if(!(E9(J)|0)){k=0;N=135;break b}else{n=k;k=0;r=j}}else{if(i){k=D7(n)|0;if(!k){k=0;j=0;i=1;N=135;break b}else{q=n;j=0}while(1){do{n=c[B>>2]|0;if(n>>>0<(c[C>>2]|0)>>>0){c[B>>2]=n+1;n=d[n>>0]|0}else n=k8(b)|0;if(!(a[K+(n+1)>>0]|0)){n=j;r=0;j=0;break i}a[k+j>>0]=n;j=j+1|0}while((j|0)!=(q|0));j=q<<1|1;n=F7(k,j)|0;if(!n){j=0;i=1;N=135;break b}else{u=q;q=j;k=n;j=u}}}if(!y){k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){n=0;k=0;r=0;j=0;break i}k=c[C>>2]|0}}else{n=0;k=q;while(1){j=c[B>>2]|0;if(j>>>0>>0){c[B>>2]=j+1;j=d[j>>0]|0}else j=k8(b)|0;if(!(a[K+(j+1)>>0]|0)){k=y;r=0;j=0;break i}a[y+n>>0]=j;n=n+1|0;k=c[C>>2]|0}}}while(0);if(!(c[C>>2]|0))q=c[B>>2]|0;else{q=(c[B>>2]|0)+-1|0;c[B>>2]=q}q=q-(c[E>>2]|0)+(c[D>>2]|0)|0;if(!q){N=137;break b}if(!((q|0)==(p|0)|v^1)){N=137;break b}do if(i)if(s){c[y>>2]=r;break}else{c[y>>2]=k;break}while(0);if(!v){if(r|0)c[r+(n<<2)>>2]=0;if(!k){k=0;break f}a[k+n>>0]=0}break}case 120:case 88:case 112:{n=16;N=123;break}case 111:{n=8;N=123;break}case 117:case 100:{n=10;N=123;break}case 105:{n=0;N=123;break}case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{o=+Z8(b,u,0);if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(y)switch(u|0){case 0:{g[y>>2]=o;break f}case 1:{h[y>>3]=o;break f}case 2:{h[y>>3]=o;break f}default:break f}break}default:{}}while(0);do if((N|0)==123){N=0;n=j8(b,n,0,-1,-1)|0;if((c[D>>2]|0)==((c[E>>2]|0)-(c[B>>2]|0)|0)){N=137;break b}if(x&(s|0)==112){c[y>>2]=n;break}else{D9(y,u,n,z);break}}while(0);e=e+(x&1)|0;n=(c[D>>2]|0)+w+(c[B>>2]|0)-(c[E>>2]|0)|0;break c}while(0);m=m+(i&1)|0;i8(b,0);i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0;if((i|0)!=(d[m>>0]|0)){N=22;break b}n=t+1|0}else{while(1){i=m+1|0;if(!($7(d[i>>0]|0)|0))break;else m=i}i8(b,0);do{i=c[B>>2]|0;if(i>>>0<(c[C>>2]|0)>>>0){c[B>>2]=i+1;i=d[i>>0]|0}else i=k8(b)|0}while(($7(i)|0)!=0);if(!(c[C>>2]|0))i=c[B>>2]|0;else{i=(c[B>>2]|0)+-1|0;c[B>>2]=i}n=(c[D>>2]|0)+t+i-(c[E>>2]|0)|0}while(0);m=m+1|0;i=a[m>>0]|0;if(!(i<<24>>24))break a;else t=n}if((N|0)==22){if(c[C>>2]|0)c[B>>2]=(c[B>>2]|0)+-1;if((e|0)!=0|(i|0)>-1)break;else{i=0;N=136}}else if((N|0)==135){i=i&1;if(!e)N=136}else if((N|0)==137)i=i&1;if((N|0)==136)e=-1;if(i){E7(k);E7(j)}}else e=0;while(0);if(O|0)s8(b);l=P;return e|0}function C9(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+16|0;d=e;c[d>>2]=c[a>>2];while(1){f=(c[d>>2]|0)+(4-1)&~(4-1);a=c[f>>2]|0;c[d>>2]=f+4;if(b>>>0>1)b=b+-1|0;else break}l=e;return a|0}function D9(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;a:do if(d|0)switch(e|0){case -2:{a[d>>0]=f;break a}case -1:{b[d>>1]=f;break a}case 0:{c[d>>2]=f;break a}case 1:{c[d>>2]=f;break a}case 3:{e=d;c[e>>2]=f;c[e+4>>2]=g;break a}default:break a}while(0);return}function E9(a){a=a|0;if(!a)a=1;else a=(c[a>>2]|0)==0&1;return a|0}function F9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+84|0;g=c[e>>2]|0;h=d+256|0;f=R7(g,0,h)|0;f=(f|0)==0?h:f-g|0;d=f>>>0>>0?f:d;Zaa(b|0,g|0,d|0)|0;c[a+4>>2]=g+d;b=g+f|0;c[a+8>>2]=b;c[e>>2]=b;return d|0}function G9(a,b,c){a=a|0;b=b|0;c=c|0;return H9(a,b,c)|0}function H9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+76>>2]|0)>-1){e=(r8(a)|0)==0;b=I9(a,b,d)|0;if(!e)s8(a)}else b=I9(a,b,d)|0;return b|0}function I9(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if((d|0)==1)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)|0;e=a+20|0;f=a+28|0;if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0?(Od[c[a+36>>2]&63](a,0,0)|0,(c[e>>2]|0)==0):0)b=-1;else{c[a+16>>2]=0;c[f>>2]=0;c[e>>2]=0;if((Od[c[a+40>>2]&63](a,b,d)|0)<0)b=-1;else{c[a+8>>2]=0;c[a+4>>2]=0;c[a>>2]=c[a>>2]&-17;b=0}}return b|0}function J9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(r8(d)|0)!=0:0){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(i=d+20|0,j=c[i>>2]|0,j>>>0<(c[d+16>>2]|0)>>>0):0){c[i>>2]=j+1;a[j>>0]=f}else e=v9(d,b)|0;s8(d)}else k=3;do if((k|0)==3){f=b&255;e=b&255;if((e|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=f;break}e=v9(d,b)|0}while(0);return e|0}function K9(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;k=O(e,d)|0;e=(d|0)==0?0:e;if((c[f+76>>2]|0)>-1)j=r8(f)|0;else j=0;g=f+74|0;h=a[g>>0]|0;a[g>>0]=h+255|h;g=f+4|0;h=c[g>>2]|0;m=(c[f+8>>2]|0)-h|0;i=m>>>0>>0?m:k;if((m|0)>0){Zaa(b|0,h|0,i|0)|0;c[g>>2]=h+i;g=k-i|0;b=b+i|0}else g=k;a:do if(!g)l=13;else{i=f+32|0;while(1){if(m8(f)|0)break;h=Od[c[i>>2]&63](f,b,g)|0;if((h+1|0)>>>0<2)break;g=g-h|0;if(!g){l=13;break a}else b=b+h|0}if(j|0)s8(f);e=((k-g|0)>>>0)/(d>>>0)|0}while(0);if((l|0)==13)if(j)s8(f);return e|0}function L9(a){a=a|0;var b=0;if(!(c[a>>2]&128))b=1;else b=(c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0?2:1;b=Od[c[a+40>>2]&63](a,0,b)|0;if((b|0)>=0)b=b-(c[a+8>>2]|0)+(c[a+4>>2]|0)+(c[a+20>>2]|0)-(c[a+28>>2]|0)|0;return b|0}function M9(a){a=a|0;var b=0;if((c[a+76>>2]|0)>-1){b=(r8(a)|0)==0;a=L9(a)|0}else a=L9(a)|0;return a|0}function N9(a){a=a|0;return M9(a)|0}function O9(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=v8(c[931]|0,a,e)|0;l=d;return b|0}function P9(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=D7(b)|0;if(a|0)break;a=Kaa()|0;if(!a){a=0;break}ee[a&63]()}return a|0}function Q9(a){a=a|0;E7(a);return}function R9(a){a=a|0;rc()}function S9(a){a=a|0;rc()}function T9(b){b=b|0;if((a[b+11>>0]|0)<0)Q9(c[b>>2]|0);return}function U9(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(d>>>0>4294967279)R9(b);j=b+11|0;g=a[j>>0]|0;h=g<<24>>24<0;if(h){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=g&255;e=10}i=k>>>0>d>>>0?k:d;d=i>>>0<11;i=d?10:(i+16&-16)+-1|0;do if((i|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(h){g=0;e=d;f=b;h=13}else{Oz(b,d,(g&255)+1|0)|0;Q9(d);h=16}}else{e=i+1|0;f=P9(e)|0;if(h){g=1;e=c[b>>2]|0;h=13;break}else{Oz(f,b,(g&255)+1|0)|0;d=b+4|0;h=15;break}}while(0);if((h|0)==13){d=b+4|0;Oz(f,e,(c[d>>2]|0)+1|0)|0;Q9(e);if(g){e=i+1|0;h=15}else h=16}if((h|0)==15){c[b+8>>2]=e|-2147483648;c[d>>2]=k;c[b>>2]=f;break}else if((h|0)==16){a[j>>0]=k;break}}while(0);return}function V9(a,b,c){a=a|0;b=b|0;c=c|0;if(!c)a=0;else a=_7(a,b,c)|0;return a|0}function W9(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;h=a[b+11>>0]|0;i=h<<24>>24<0;if(i)h=c[b+4>>2]|0;else h=h&255;if((g|0)==-1|h>>>0>>0)S9(b);h=h-d|0;e=h>>>0>>0?h:e;if(i)b=c[b>>2]|0;h=e>>>0>g>>>0;b=V9(b+d|0,f,h?g:e)|0;if(!b)return (e>>>0>>0?-1:h&1)|0;else return b|0;return 0}function X9(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=l;l=l+48|0;h=f+32|0;d=f+24|0;i=f+16|0;g=f;f=f+36|0;a=Y9()|0;if(a|0?(e=c[a>>2]|0,e|0):0){a=e+48|0;b=c[a>>2]|0;a=c[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){c[d>>2]=42042;Z9(41992,d)}if((b|0)==1126902529&(a|0)==1129074247)a=c[e+44>>2]|0;else a=e+80|0;c[f>>2]=a;e=c[e>>2]|0;a=c[e+4>>2]|0;if(Od[c[(c[180]|0)+16>>2]&63](720,e,f)|0){i=c[f>>2]|0;i=Cd[c[(c[i>>2]|0)+8>>2]&63](i)|0;c[g>>2]=42042;c[g+4>>2]=a;c[g+8>>2]=i;Z9(41906,g)}else{c[i>>2]=42042;c[i+4>>2]=a;Z9(41951,i)}}Z9(42030,h)}function Y9(){var a=0,b=0;a=l;l=l+16|0;if(!(zc(58596,44)|0)){b=xc(c[14650]|0)|0;l=a;return b|0}else Z9(42181,a);return 0}function Z9(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;b=c[964]|0;v8(b,a,d)|0;J9(10,b)|0;rc()}function _9(a){a=a|0;return}function $9(a){a=a|0;_9(a);Q9(a);return}function aaa(a){a=a|0;return}function baa(a){a=a|0;return}function caa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=l;l=l+64|0;f=h;if(!(gaa(a,b,0)|0))if((b|0)!=0?(g=kaa(b,744,728,0)|0,(g|0)!=0):0){b=f+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;Ae[c[(c[g>>2]|0)+28>>2]&15](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];b=1}else b=0}else b=0;else b=1;l=h;return b|0}function daa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);return}function eaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(gaa(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else iaa(0,d,e,f);while(0);return}function faa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);return}function gaa(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function haa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;b=d+16|0;g=c[b>>2]|0;do if(g){if((g|0)!=(e|0)){f=d+36|0;c[f>>2]=(c[f>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break}b=d+24|0;if((c[b>>2]|0)==2)c[b>>2]=f}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1}while(0);return}function iaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if((c[b+4>>2]|0)==(d|0)?(f=b+28|0,(c[f>>2]|0)!=1):0)c[f>>2]=e;return}function jaa(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;a[d+53>>0]=1;do if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;f=c[b>>2]|0;if(!f){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break}if((f|0)!=(e|0)){g=d+36|0;c[g>>2]=(c[g>>2]|0)+1;a[d+54>>0]=1;break}f=d+24|0;b=c[f>>2]|0;if((b|0)==2){c[f>>2]=g;b=g}if((b|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1}while(0);return}function kaa(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;o=q;n=c[d>>2]|0;p=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[o>>2]=f;c[o+4>>2]=d;c[o+8>>2]=e;c[o+12>>2]=g;d=o+16|0;e=o+20|0;g=o+24|0;h=o+28|0;i=o+32|0;j=o+40|0;k=d;m=k+36|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));b[d+36>>1]=0;a[d+38>>0]=0;a:do if(gaa(n,f,0)|0){c[o+48>>2]=1;Ie[c[(c[n>>2]|0)+20>>2]&7](n,o,p,p,1,0);d=(c[g>>2]|0)==1?p:0}else{Ee[c[(c[n>>2]|0)+24>>2]&15](n,o,p,1,0);switch(c[o+36>>2]|0){case 0:{d=(c[j>>2]|0)==1&(c[h>>2]|0)==1&(c[i>>2]|0)==1?c[e>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[g>>2]|0)!=1?!((c[j>>2]|0)==0&(c[h>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[d>>2]|0}while(0);l=q;return d|0}function laa(a){a=a|0;_9(a);Q9(a);return}function maa(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gaa(a,c[b+8>>2]|0,g)|0)jaa(0,b,d,e,f);else{a=c[a+8>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function naa(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;do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){j=c[b+8>>2]|0;Ee[c[(c[j>>2]|0)+24>>2]&15](j,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;k=d+53|0;a[k>>0]=0;b=c[b+8>>2]|0;Ie[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[k>>0]|0)if(!(a[f>>0]|0)){f=3;j=11}else f=3;else{f=4;j=11}if((j|0)==11){c[h>>2]=e;k=d+40|0;c[k>>2]=(c[k>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function oaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gaa(a,c[b+8>>2]|0,0)|0)haa(0,b,d,e);else{a=c[a+8>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function paa(a){a=a|0;return}function qaa(){var a=0;a=l;l=l+16|0;if(!(yc(58600,85)|0)){l=a;return}else Z9(42230,a)}function raa(a){a=a|0;var b=0;b=l;l=l+16|0;E7(a);if(!(Ac(c[14650]|0,0)|0)){l=b;return}else Z9(42280,b)}function saa(){var a=0,b=0;a=Y9()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)taa(c[b+12>>2]|0);taa(uaa()|0)}function taa(a){a=a|0;var b=0;b=l;l=l+16|0;ee[a&63]();Z9(42333,b)}function uaa(){var a=0;a=c[1149]|0;c[1149]=a+0;return a|0}function vaa(a){a=a|0;_9(a);Q9(a);return}function waa(a,b,c){a=a|0;b=b|0;c=c|0;return gaa(a,b,0)|0}function xaa(a){a=a|0;_9(a);Q9(a);return}function yaa(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=l;l=l+64|0;h=j;c[d>>2]=c[c[d>>2]>>2];if(!(zaa(a,b,0)|0))if(((b|0)!=0?(e=kaa(b,744,800,0)|0,(e|0)!=0):0)?(c[e+8>>2]&~c[a+8>>2]|0)==0:0){a=a+12|0;b=e+12|0;if(!(gaa(c[a>>2]|0,c[b>>2]|0,0)|0)?!(gaa(c[a>>2]|0,832,0)|0):0){a=c[a>>2]|0;if((((a|0)!=0?(g=kaa(a,744,728,0)|0,(g|0)!=0):0)?(f=c[b>>2]|0,(f|0)!=0):0)?(i=kaa(f,744,728,0)|0,(i|0)!=0):0){a=h+4|0;b=a+52|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));c[h>>2]=i;c[h+8>>2]=g;c[h+12>>2]=-1;c[h+48>>2]=1;Ae[c[(c[i>>2]|0)+28>>2]&15](i,h,c[d>>2]|0,1);if((c[h+24>>2]|0)==1){c[d>>2]=c[h+16>>2];a=1}else a=0}else a=0}else a=1}else a=0;else a=1;l=j;return a|0}function zaa(a,b,c){a=a|0;b=b|0;c=c|0;if(gaa(a,b,0)|0)a=1;else a=gaa(b,856,0)|0;return a|0}function Aaa(a){a=a|0;_9(a);Q9(a);return}function Baa(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;if(gaa(b,c[d+8>>2]|0,h)|0)jaa(0,d,e,f,g);else{p=d+52|0;i=a[p>>0]|0;j=d+53|0;k=a[j>>0]|0;o=c[b+12>>2]|0;l=b+16+(o<<3)|0;a[p>>0]=0;a[j>>0]=0;Faa(b+16|0,d,e,f,g,h);a:do if((o|0)>1){m=d+24|0;n=b+8|0;o=d+54|0;b=b+24|0;do{if(a[o>>0]|0)break a;if(!(a[p>>0]|0)){if(a[j>>0]|0?(c[n>>2]&1|0)==0:0)break a}else{if((c[m>>2]|0)==1)break a;if(!(c[n>>2]&2))break a}a[p>>0]=0;a[j>>0]=0;Faa(b,d,e,f,g,h);b=b+8|0}while(b>>>0>>0)}while(0);a[p>>0]=i;a[j>>0]=k}return}function Caa(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;a:do if(!(gaa(b,c[d+8>>2]|0,g)|0)){if(!(gaa(b,c[d>>2]|0,g)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;Gaa(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;Gaa(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;f=d+52|0;l=d+53|0;n=d+54|0;m=b+8|0;o=d+24|0;h=0;i=b+16|0;j=0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[f>>0]=0;a[l>>0]=0;Faa(i,d,e,e,1,g);if(a[n>>0]|0){b=18;break}do if(a[l>>0]|0){if(!(a[f>>0]|0))if(!(c[m>>2]&1)){h=1;b=18;break b}else{h=1;b=j;break}if((c[o>>2]|0)==1){b=23;break b}if(!(c[m>>2]&2)){b=23;break b}else{h=1;b=1}}else b=j;while(0);i=i+8|0;j=b}do if((b|0)==18){if((!j?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[n>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else iaa(0,d,e,f);while(0);return}function Daa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(gaa(b,c[d+8>>2]|0,0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;Eaa(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{Eaa(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0>>0)}}else haa(0,d,e,f);while(0);return}function Eaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;Ae[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,g&2|0?e:2);return}function Faa(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=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;Ie[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+h|0,i&2|0?f:2,g);return}function Gaa(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;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;Ee[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,h&2|0?e:2,f);return}function Haa(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Iaa(a){a=a|0;return}function Jaa(a){a=a|0;return}function Kaa(){var a=0;a=c[14651]|0;c[14651]=a+0;return a|0}function Laa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;e=f;c[e>>2]=c[d>>2];a=Od[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=f;return a&1|0}function Maa(a){a=a|0;if(!a)a=0;else a=(kaa(a,744,800,0)|0)!=0&1;return a|0}function Naa(){}function Oaa(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=O(e,f)|0;d=a>>>16;a=(c>>>16)+(O(e,d)|0)|0;e=b>>>16;b=O(e,f)|0;return (z=(a>>>16)+(O(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Paa(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=Oaa(e,f)|0;a=z;return (z=(O(b,f)|0)+(O(d,e)|0)+a|a&0,c|0|0)|0}function Qaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (z=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Raa(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 (z=d,a-c>>>0|0)|0}function Saa(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Taa(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 (z=n,f)|0}else{if(!g){n=0;f=0;return (z=n,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (z=n,f)|0}}g=(i|0)==0;do if(h){if(!g){g=(R(i|0)|0)-(R(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 (z=n,f)|0}g=h-1|0;if(g&h|0){i=(R(h|0)|0)+33-(R(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 (z=o,p)|0}else{p=Saa(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (z=o,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 (z=o,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 (z=o,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>>>((Saa(i|0)|0)>>>0);return (z=o,p)|0}g=(R(i|0)|0)-(R(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 (z=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Qaa(m|0,l|0,-1,-1)|0;d=z;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;Raa(k|0,d|0,e|0,n|0)|0;p=z;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Raa(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z;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 (z=o,p)|0}function Uaa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Taa(a,b,c,d,0)|0}function Vaa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+16|0;f=g|0;Taa(a,b,d,e,f)|0;l=g;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Waa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Xaa(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Zaa(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return tc(b|0,d|0,e|0)|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 _aa(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 Zaa(b,c,d)|0;return b|0}function $aa(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;g=f-64|0;i=d|d<<8|d<<16|d<<24;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 aba(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Ib(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Ib(12);return -1}return b|0}function bba(a){a=a|0;return +xd[a&31]()}function cba(a,b){a=a|0;b=b|0;return +yd[a&3](b|0)}function dba(a,b,c){a=a|0;b=b|0;c=c|0;return +zd[a&15](b|0,c|0)}function eba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Ad[a&1](b|0,c|0,d|0)}function fba(a){a=a|0;return Bd[a&31]()|0}function gba(a,b){a=a|0;b=b|0;return Cd[a&63](b|0)|0}function hba(a,b,c){a=a|0;b=b|0;c=+c;return Dd[a&1](b|0,+c)|0}function iba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;return Ed[a&3](b|0,+c,+d)|0}function jba(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;return Fd[a&1](b|0,+c,+d,+e,+f)|0}function kba(a,b,c){a=a|0;b=b|0;c=c|0;return Gd[a&63](b|0,c|0)|0}function lba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return Hd[a&3](b|0,c|0,+d)|0}function mba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Id[a&3](b|0,c|0,+d,+e)|0}function nba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;return Jd[a&7](b|0,c|0,+d,+e,+f,g|0,+h)|0}function oba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;return Kd[a&7](b|0,c|0,+d,+e,f|0,+g)|0}function pba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;return Ld[a&1](b|0,c|0,+d,+e,f|0,g|0)|0}function qba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return Md[a&1](b|0,c|0,+d,e|0)|0}function rba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;return Nd[a&7](b|0,c|0,+d,e|0,f|0,g|0)|0}function sba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Od[a&63](b|0,c|0,d|0)|0}function tba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;return Pd[a&1](b|0,c|0,d|0,+e,+f)|0}function uba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=+i;return Qd[a&3](b|0,c|0,d|0,+e,+f,+g,h|0,+i)|0}function vba(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;return Rd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0)|0}function wba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;return Sd[a&1](b|0,c|0,d|0,+e,+f,+g,h|0,i|0,+j)|0}function xba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;return Td[a&3](b|0,c|0,d|0,+e,+f,g|0,+h)|0}function yba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=h|0;return Ud[a&1](b|0,c|0,d|0,+e,+f,g|0,h|0)|0}function zba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;return Vd[a&1](b|0,c|0,d|0,+e,f|0)|0}function Aba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;return Wd[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0)|0}function Bba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xd[a&31](b|0,c|0,d|0,e|0)|0}function Cba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;return Yd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0)|0}function Dba(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;return Zd[a&1](b|0,c|0,d|0,e|0,+f,+g,+h,i|0,j|0,+k)|0}function Eba(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;g=+g;h=h|0;i=+i;return _d[a&1](b|0,c|0,d|0,e|0,+f,+g,h|0,+i)|0}function Fba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;return $d[a&1](b|0,c|0,d|0,e|0,+f,g|0)|0}function Gba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ae[a&15](b|0,c|0,d|0,e|0,f|0)|0}function Hba(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 be[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Iba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ce[a&7](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function Jba(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 de[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)|0}function Kba(a){a=a|0;ee[a&63]()}function Lba(a,b){a=a|0;b=+b;fe[a&15](+b)}function Mba(a,b,c){a=a|0;b=+b;c=+c;ge[a&3](+b,+c)}function Nba(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;he[a&3](+b,+c,+d,e|0,f|0,g|0)}function Oba(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;ie[a&1](+b,c|0,d|0)}function Pba(a,b){a=a|0;b=b|0;je[a&127](b|0)}function Qba(a,b,c){a=a|0;b=b|0;c=+c;ke[a&7](b|0,+c)}function Rba(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;le[a&1](b|0,+c,+d)}function Sba(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=g|0;h=h|0;me[a&1](b|0,+c,+d,+e,f|0,g|0,h|0)}function Tba(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;ne[a&3](b|0,+c,d|0,e|0)}function Uba(a,b,c){a=a|0;b=b|0;c=c|0;oe[a&127](b|0,c|0)}function Vba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;pe[a&15](b|0,c|0,+d)}function Wba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;qe[a&1](b|0,c|0,+d,e|0)}function Xba(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;re[a&3](b|0,c|0,+d,e|0,f|0)}function Yba(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;se[a&1](b|0,c|0,+d,e|0,f|0,+g)}function Zba(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;te[a&1](b|0,c|0,+d,e|0,f|0,g|0,h|0,+i,j|0)}function _ba(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue[a&63](b|0,c|0,d|0)}function $ba(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;ve[a&1](b|0,c|0,d|0,+e)}function aca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;we[a&1](b|0,c|0,d|0,+e,f|0)}function bca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;xe[a&1](b|0,c|0,d|0,+e,f|0,g|0)}function cca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=+h;ye[a&1](b|0,c|0,d|0,+e,f|0,g|0,+h)}function dca(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;j=+j;k=k|0;ze[a&1](b|0,c|0,d|0,+e,f|0,g|0,h|0,i|0,+j,k|0)}function eca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ae[a&15](b|0,c|0,d|0,e|0)}function fca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Be[a&1](b|0,c|0,d|0,e|0,+f)}function gca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;Ce[a&3](b|0,c|0,d|0,e|0,+f,g|0)}function hca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;De[a&1](b|0,c|0,d|0,e|0,+f,g|0,+h)}function ica(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ee[a&15](b|0,c|0,d|0,e|0,f|0)}function jca(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;Fe[a&3](b|0,c|0,d|0,e|0,f|0,+g)}function kca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;Ge[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0)}function lca(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;h=h|0;i=+i;He[a&1](b|0,c|0,d|0,e|0,f|0,+g,h|0,+i)}function mca(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;Ie[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function nca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;Je[a&3](b|0,c|0,d|0,e|0,f|0,g|0,+h)}function oca(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;i=i|0;Ke[a&1](b|0,c|0,d|0,e|0,f|0,g|0,+h,i|0)}function pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Le[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function qca(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;Me[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i)}function rca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Ne[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,+i,j|0)}function sca(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;Oe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function tca(a,b,c,d,e,f,g,h,i,j){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;j=j|0;Pe[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function uca(a,b,c,d,e,f,g,h,i,j,k){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;j=j|0;k=k|0;Qe[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function vca(){S(0);return 0.0}function wca(a){a=a|0;S(1);return 0.0}function xca(a,b){a=a|0;b=b|0;S(2);return 0.0}function yca(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function zca(){S(4);return 0}function Aca(a){a=a|0;S(5);return 0}function Bca(a,b){a=a|0;b=+b;S(6);return 0}function Cca(a,b,c){a=a|0;b=+b;c=+c;S(7);return 0}function Dca(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;S(8);return 0}function Eca(a,b){a=a|0;b=b|0;S(9);return 0}function Fca(a,b,c){a=a|0;b=b|0;c=+c;S(10);return 0}function Gca(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;S(11);return 0}function Hca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=f|0;g=+g;S(12);return 0}function Ica(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=+f;S(13);return 0}function Jca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;S(14);return 0}function Kca(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(15);return 0}function Lca(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;S(16);return 0}function Mca(a,b,c){a=a|0;b=b|0;c=c|0;S(17);return 0}function Nca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;S(18);return 0}function Oca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=+h;S(19);return 0}function Pca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;S(20);return 0}function Qca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=+f;g=g|0;h=h|0;i=+i;S(21);return 0}function Rca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=+g;S(22);return 0}function Sca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;g=g|0;S(23);return 0}function Tca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(24);return 0}function Uca(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;S(25);return 0}function Vca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(26);return 0}function Wca(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ec(a|0,b|0,c|0,d|0)|0}function Xca(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;S(27);return 0}function Yca(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=h|0;i=i|0;j=+j;S(28);return 0}function Zca(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;h=+h;S(29);return 0}function _ca(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(30);return 0}function $ca(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(31);return 0}function ada(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(32);return 0}function bda(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;S(33);return 0}function cda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(34);return 0}function dda(){S(35)}function eda(a){a=+a;S(36)}function fda(a,b){a=+a;b=+b;S(37)}function gda(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(38)}function hda(a,b,c){a=+a;b=b|0;c=c|0;S(39)}function ida(a){a=a|0;S(40)}function jda(a,b){a=a|0;b=+b;S(41)}function kda(a,b,c){a=a|0;b=+b;c=+c;S(42)}function lda(a,b,c,d,e,f,g){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=f|0;g=g|0;S(43)}function mda(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(44)}function nda(a,b){a=a|0;b=b|0;S(45)}function oda(a,b,c){a=a|0;b=b|0;c=+c;S(46)}function pda(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(47)}function qda(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(48)}function rda(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=+f;S(49)}function sda(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;i=i|0;S(50)}function tda(a,b,c){a=a|0;b=b|0;c=c|0;S(51)}function uda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(52)}function vda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;S(53)}function wda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(54)}function xda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=+g;S(55)}function yda(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;i=+i;j=j|0;S(56)}function zda(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(57)}function Ada(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(58)}function Bda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;S(59)}function Cda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=+g;S(60)}function Dda(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(61)}function Eda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(62)}function Fda(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;S(63)}function Gda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=g|0;h=+h;S(64)}function Hda(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(65)}function Ida(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;S(66)}function Jda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;S(67)}function Kda(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;S(68)}function Lda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=+h;S(69)}function Mda(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;i=i|0;S(70)}function Nda(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(71)}function Oda(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;S(72)}function Pda(a,b,c,d,e,f,g,h,i,j){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;j=j|0;S(73)} + +// EMSCRIPTEN_END_FUNCS +var xd=[vca,Im,Lm,rm,sm,bn,cn,dn,fn,Sm,Kl,Wm,xg,Mm,Nm,Om,Pm,co,Ch,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca,vca];var yd=[wca,Uq,Hm,GS];var zd=[xca,jQ,uO,KO,nU,WV,HW,OW,w2,r5,$5,xca,xca,xca,xca,xca];var Ad=[yca,NW];var Bd=[zca,zm,Am,Vq,Wq,hq,iq,Dq,Kj,Oj,Mj,Nj,pj,oj,Dh,Gj,kU,m2,m3,Y3,k5,U5,zca,zca,zca,zca,zca,zca,zca,zca,zca,zca];var Cd=[Aca,J7,D7,kf,CB,ZB,kE,rE,ih,Lj,qm,tk,Pf,qj,rj,vj,wj,zj,yj,sF,qR,yS,mQ,sG,_M,wN,gU,jU,NV,CX,HY,cZ,YZ,C1,h2,l2,q2,Bg,h3,l3,T3,X3,D4,f5,j5,P5,T5,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca,Aca];var Dd=[Bca,Aj];var Ed=[Cca,tj,Y5,Cca];var Fd=[Dca,o5];var Gd=[Eca,ji,Fs,yy,Ay,mB,WB,aC,hC,ND,XD,aE,hE,mE,qE,vq,NE,uj,xj,KS,UQ,ZP,uP,LJ,hJ,vI,_H,qH,FG,uU,GU,UV,YV,lW,yW,AW,JX,PX,YX,OY,lZ,oZ,i_,G1,N1,R1,p2,u2,z2,E2,s3,_3,b4,f4,m4,H4,y5,Z5,c6,Eca,Eca,Eca,Eca,Eca];var Hd=[Fca,LH,t2,Fca];var Id=[Gca,rD,QH,Gca];var Jd=[Hca,zC,CC,FC,GC,Hca,Hca,Hca];var Kd=[Ica,lD,oD,pD,qD,Ica,Ica,Ica];var Ld=[Jca,ZC];var Md=[Kca,VG];var Nd=[Lca,KC,NC,OC,PC,Lca,Lca,Lca];var Od=[Mca,K7,L7,O7,V8,caa,waa,yaa,iA,iC,lC,vC,iD,jD,kD,GD,HD,ID,QD,UD,lE,nE,Ak,pF,GQ,zP,EL,_K,PK,nK,cK,CJ,BI,WH,nL,jO,NU,OU,bW,cW,qW,rW,BW,x5,A5,Q7,A9,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca,Mca];var Pd=[Nca,nM];var Qd=[Oca,bO,YN,Oca];var Rd=[Pca,QC];var Sd=[Qca,HC];var Td=[Rca,AD,wM,Rca];var Ud=[Sca,RM];var Vd=[Tca,cJ];var Wd=[Uca,KN];var Xd=[Vca,lA,aD,dD,eD,JD,MD,VD,dE,vE,US,TO,OO,zL,vK,HI,EH,Wca,TU,hW,wW,p5,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca,Vca];var Yd=[Xca,BN];var Zd=[Yca,QN];var _d=[Zca,_L];var $d=[_ca,YI];var ae=[$ca,wC,fD,uD,xD,yD,zD,WD,PS,LM,LL,VK,iK,$ca,$ca,$ca];var be=[ada,TC,DD,gO,EM,hM,ada,ada];var ce=[bda,eC,WC,tN,UL,bda,bda,bda];var de=[cda,iP,XM,cda];var ee=[dda,X9,Gh,Zz,Mi,pi,rz,Ni,yk,Gm,PA,bB,mg,dm,$l,bm,qq,Sq,Oq,Co,Do,wn,Tq,kl,jo,Vp,kr,bo,bq,ak,_j,jq,kq,oq,lk,ik,Al,Nn,xq,Fq,Li,mn,Pj,Ek,qaa,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda,dda];var fe=[eda,Um,hn,jn,ln,kg,cm,Up,Wp,Ym,Zm,eda,eda,eda,eda,eda];var ge=[fda,kn,ch,fda];var he=[gda,hF,kF,gda];var ie=[hda,sC];var je=[ida,_9,$9,aaa,baa,laa,vaa,xaa,Aaa,E7,Tz,Wz,Xz,$z,cA,dA,eA,hA,vA,JA,XA,ZA,_A,aB,Gk,Fk,kB,_l,am,qB,Xm,an,BB,FB,GB,HB,MB,NB,OB,PB,UB,VB,uq,TD,$D,gE,Hn,Jn,tE,EE,HE,IE,nn,QE,RE,Fj,Hj,Ij,Jj,DF,EF,HF,IF,JF,KF,LF,MF,pT,_R,hU,OV,DX,IY,dZ,ZZ,iv,jv,D1,i2,Ag,i3,U3,g5,Q5,k6,raa,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida,ida];var ke=[jda,ar,Zq,vS,ef,jda,jda,jda];var le=[kda,xR];var me=[lda,qI];var ne=[mda,$E,pO,mda];var oe=[nda,lf,mf,li,oA,rA,tA,uA,wA,xA,DA,Fm,LA,MA,NA,cB,gB,hB,lB,rB,tB,uB,IB,LB,QB,TB,eo,YD,sE,KE,LE,ME,SE,vF,wF,AF,iT,ZS,fR,CQ,wQ,SJ,pU,vU,wU,xU,yU,zU,AU,BU,CU,DU,PV,iW,jW,kW,nf,GW,EX,KX,QX,JY,eZ,qZ,_Z,e_,j_,t_,I1,O1,N2,n3,t3,u3,h4,n4,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda,nda];var pe=[oda,eQ,oU,XU,XV,x2,wg,s5,a6,oda,oda,oda,oda,oda,oda,oda];var qe=[pda,xF];var re=[qda,NI,C$,qda];var se=[rda,v$];var te=[sda,P$];var ue=[tda,ki,AA,QA,TA,UA,vB,yE,BE,dF,kS,RR,jR,RP,HP,fL,HU,IU,zW,FW,VX,ZX,jZ,mZ,pZ,vZ,d_,H1,A2,$3,c4,g4,s4,kp,t5,b6,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda,tda];var ve=[uda,J2];var we=[vda,VE];var xe=[wda,I$];var ye=[xda,B$];var ze=[yda,V$];var Ae=[zda,faa,oaa,Daa,GA,pS,IR,CR,pQ,ZJ,k_,w4,x4,zda,zda,zda];var Be=[Ada,u_];var Ce=[Bda,YE,I_,Bda];var De=[Cda,B_];var Ee=[Dda,eaa,naa,Caa,XR,p_,o$,J$,C4,Dda,Dda,Dda,Dda,Dda,Dda,Dda];var Fe=[Eda,A_,h$,Eda];var Ge=[Fda,O_];var He=[Gda,H_];var Ie=[Hda,daa,maa,Baa,bC,b$,u$,O$];var Je=[Ida,W_,n$,Ida];var Ke=[Jda,W$];var Le=[Kda,oP,P_,g$];var Me=[Lda,a$];var Ne=[Mda,a0];var Oe=[Nda,V_];var Pe=[Oda,oC,rC,Oda];var Qe=[Pda,HO];return{__GLOBAL__sub_I_bind_cpp:o6,__GLOBAL__sub_I_bind_imgui_cpp:tz,__GLOBAL__sub_I_imgui_cpp:Cu,___cxa_can_catch:Laa,___cxa_is_pointer_type:Maa,___getTypeName:C7,___muldi3:Paa,___udivdi3:Uaa,___uremdi3:Vaa,_bitshift64Lshr:Waa,_bitshift64Shl:Xaa,_free:E7,_i64Add:Qaa,_i64Subtract:Raa,_llvm_bswap_i32:Yaa,_malloc:D7,_memcpy:Zaa,_memmove:_aa,_memset:$aa,_sbrk:aba,dynCall_d:bba,dynCall_di:cba,dynCall_dii:dba,dynCall_diii:eba,dynCall_i:fba,dynCall_ii:gba,dynCall_iid:hba,dynCall_iidd:iba,dynCall_iidddd:jba,dynCall_iii:kba,dynCall_iiid:lba,dynCall_iiidd:mba,dynCall_iiidddid:nba,dynCall_iiiddid:oba,dynCall_iiiddii:pba,dynCall_iiidi:qba,dynCall_iiidiii:rba,dynCall_iiii:sba,dynCall_iiiidd:tba,dynCall_iiiidddid:uba,dynCall_iiiidddii:vba,dynCall_iiiidddiid:wba,dynCall_iiiiddid:xba,dynCall_iiiiddii:yba,dynCall_iiiidi:zba,dynCall_iiiidiii:Aba,dynCall_iiiii:Bba,dynCall_iiiiidddii:Cba,dynCall_iiiiidddiid:Dba,dynCall_iiiiiddid:Eba,dynCall_iiiiidi:Fba,dynCall_iiiiii:Gba,dynCall_iiiiiii:Hba,dynCall_iiiiiiii:Iba,dynCall_iiiiiiiii:Jba,dynCall_v:Kba,dynCall_vd:Lba,dynCall_vdd:Mba,dynCall_vdddiii:Nba,dynCall_vdii:Oba,dynCall_vi:Pba,dynCall_vid:Qba,dynCall_vidd:Rba,dynCall_vidddiii:Sba,dynCall_vidii:Tba,dynCall_vii:Uba,dynCall_viid:Vba,dynCall_viidi:Wba,dynCall_viidii:Xba,dynCall_viidiid:Yba,dynCall_viidiiiidi:Zba,dynCall_viii:_ba,dynCall_viiid:$ba,dynCall_viiidi:aca,dynCall_viiidii:bca,dynCall_viiidiid:cca,dynCall_viiidiiiidi:dca,dynCall_viiii:eca,dynCall_viiiid:fca,dynCall_viiiidi:gca,dynCall_viiiidid:hca,dynCall_viiiii:ica,dynCall_viiiiid:jca,dynCall_viiiiidi:kca,dynCall_viiiiidid:lca,dynCall_viiiiii:mca,dynCall_viiiiiid:nca,dynCall_viiiiiidi:oca,dynCall_viiiiiii:pca,dynCall_viiiiiiid:qca,dynCall_viiiiiiidi:rca,dynCall_viiiiiiii:sca,dynCall_viiiiiiiii:tca,dynCall_viiiiiiiiii:uca,establishStackSpace:Ue,getTempRet0:Xe,runPostSets:Naa,setTempRet0:We,setThrew:Ve,stackAlloc:Re,stackRestore:Te,stackSave:Se}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module["__GLOBAL__sub_I_bind_cpp"]=asm["__GLOBAL__sub_I_bind_cpp"];var __GLOBAL__sub_I_bind_imgui_cpp=Module["__GLOBAL__sub_I_bind_imgui_cpp"]=asm["__GLOBAL__sub_I_bind_imgui_cpp"];var __GLOBAL__sub_I_imgui_cpp=Module["__GLOBAL__sub_I_imgui_cpp"]=asm["__GLOBAL__sub_I_imgui_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 ___getTypeName=Module["___getTypeName"]=asm["___getTypeName"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var setThrew=Module["setThrew"]=asm["setThrew"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_d=Module["dynCall_d"]=asm["dynCall_d"];var dynCall_di=Module["dynCall_di"]=asm["dynCall_di"];var dynCall_dii=Module["dynCall_dii"]=asm["dynCall_dii"];var dynCall_diii=Module["dynCall_diii"]=asm["dynCall_diii"];var dynCall_i=Module["dynCall_i"]=asm["dynCall_i"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iid=Module["dynCall_iid"]=asm["dynCall_iid"];var dynCall_iidd=Module["dynCall_iidd"]=asm["dynCall_iidd"];var dynCall_iidddd=Module["dynCall_iidddd"]=asm["dynCall_iidddd"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiid=Module["dynCall_iiid"]=asm["dynCall_iiid"];var dynCall_iiidd=Module["dynCall_iiidd"]=asm["dynCall_iiidd"];var dynCall_iiidddid=Module["dynCall_iiidddid"]=asm["dynCall_iiidddid"];var dynCall_iiiddid=Module["dynCall_iiiddid"]=asm["dynCall_iiiddid"];var dynCall_iiiddii=Module["dynCall_iiiddii"]=asm["dynCall_iiiddii"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_iiidiii=Module["dynCall_iiidiii"]=asm["dynCall_iiidiii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiidd=Module["dynCall_iiiidd"]=asm["dynCall_iiiidd"];var dynCall_iiiidddid=Module["dynCall_iiiidddid"]=asm["dynCall_iiiidddid"];var dynCall_iiiidddii=Module["dynCall_iiiidddii"]=asm["dynCall_iiiidddii"];var dynCall_iiiidddiid=Module["dynCall_iiiidddiid"]=asm["dynCall_iiiidddiid"];var dynCall_iiiiddid=Module["dynCall_iiiiddid"]=asm["dynCall_iiiiddid"];var dynCall_iiiiddii=Module["dynCall_iiiiddii"]=asm["dynCall_iiiiddii"];var dynCall_iiiidi=Module["dynCall_iiiidi"]=asm["dynCall_iiiidi"];var dynCall_iiiidiii=Module["dynCall_iiiidiii"]=asm["dynCall_iiiidiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiidddii=Module["dynCall_iiiiidddii"]=asm["dynCall_iiiiidddii"];var dynCall_iiiiidddiid=Module["dynCall_iiiiidddiid"]=asm["dynCall_iiiiidddiid"];var dynCall_iiiiiddid=Module["dynCall_iiiiiddid"]=asm["dynCall_iiiiiddid"];var dynCall_iiiiidi=Module["dynCall_iiiiidi"]=asm["dynCall_iiiiidi"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=asm["dynCall_iiiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vdd=Module["dynCall_vdd"]=asm["dynCall_vdd"];var dynCall_vdddiii=Module["dynCall_vdddiii"]=asm["dynCall_vdddiii"];var dynCall_vdii=Module["dynCall_vdii"]=asm["dynCall_vdii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_vidd=Module["dynCall_vidd"]=asm["dynCall_vidd"];var dynCall_vidddiii=Module["dynCall_vidddiii"]=asm["dynCall_vidddiii"];var dynCall_vidii=Module["dynCall_vidii"]=asm["dynCall_vidii"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viid=Module["dynCall_viid"]=asm["dynCall_viid"];var dynCall_viidi=Module["dynCall_viidi"]=asm["dynCall_viidi"];var dynCall_viidii=Module["dynCall_viidii"]=asm["dynCall_viidii"];var dynCall_viidiid=Module["dynCall_viidiid"]=asm["dynCall_viidiid"];var dynCall_viidiiiidi=Module["dynCall_viidiiiidi"]=asm["dynCall_viidiiiidi"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiid=Module["dynCall_viiid"]=asm["dynCall_viiid"];var dynCall_viiidi=Module["dynCall_viiidi"]=asm["dynCall_viiidi"];var dynCall_viiidii=Module["dynCall_viiidii"]=asm["dynCall_viiidii"];var dynCall_viiidiid=Module["dynCall_viiidiid"]=asm["dynCall_viiidiid"];var dynCall_viiidiiiidi=Module["dynCall_viiidiiiidi"]=asm["dynCall_viiidiiiidi"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiid=Module["dynCall_viiiid"]=asm["dynCall_viiiid"];var dynCall_viiiidi=Module["dynCall_viiiidi"]=asm["dynCall_viiiidi"];var dynCall_viiiidid=Module["dynCall_viiiidid"]=asm["dynCall_viiiidid"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiid=Module["dynCall_viiiiid"]=asm["dynCall_viiiiid"];var dynCall_viiiiidi=Module["dynCall_viiiiidi"]=asm["dynCall_viiiiidi"];var dynCall_viiiiidid=Module["dynCall_viiiiidid"]=asm["dynCall_viiiiidid"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiiiiid=Module["dynCall_viiiiiid"]=asm["dynCall_viiiiiid"];var dynCall_viiiiiidi=Module["dynCall_viiiiiidi"]=asm["dynCall_viiiiiidi"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];var dynCall_viiiiiiid=Module["dynCall_viiiiiiid"]=asm["dynCall_viiiiiiid"];var dynCall_viiiiiiidi=Module["dynCall_viiiiiiidi"]=asm["dynCall_viiiiiiidi"];var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=asm["dynCall_viiiiiiii"];var dynCall_viiiiiiiii=Module["dynCall_viiiiiiiii"]=asm["dynCall_viiiiiiiii"];var dynCall_viiiiiiiiii=Module["dynCall_viiiiiiiiii"]=asm["dynCall_viiiiiiiiii"];Module["asm"]=asm;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);HEAPU8.set(data,GLOBAL_BASE);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"]){function useRequest(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)}if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]&&status===0){return}if(Module["noExitRuntime"]){}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;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;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + diff --git a/emscripten.d.ts b/emscripten.d.ts new file mode 100644 index 0000000..49abfe5 --- /dev/null +++ b/emscripten.d.ts @@ -0,0 +1,64 @@ +/// + +export declare class EmscriptenClassHandle { +} + +export declare class EmscriptenRegisteredClass { + baseClass: any; + "constructor": (...args: any[]) => this; + constructor_body: any; + downcast: number; + getActualType: () => any; + instancePrototype: EmscriptenClassHandle; + name: string; + pureVirtualFunctions: ((...args: any[]) => any)[]; + rawDestructor: () => void; + upcast: number; +} + +export declare class EmscriptenRegisteredPointer { + destructorFunction: (() => void) | null; + isConst: boolean; + isReference: boolean; + isSmartPointer: boolean; + name: string; + pointeeType: any; + rawConstructor: any; + rawDestructor: any; + rawGetPointee: any; + rawShare: any; + registeredClass: EmscriptenRegisteredClass; + sharingPolicy: any; + toWireType: (destructors: any[], handle: EmscriptenClass) => number; +} + +export declare class EmscriptenWireType { + ptr: number; + ptrType: EmscriptenRegisteredPointer; + count: { value: number }; +} + +export declare class EmscriptenClassReference { + $$: EmscriptenWireType; +} + +export declare class EmscriptenClass extends EmscriptenClassReference { + delete(): void; +} + +export const buffer: ArrayBuffer; +export const HEAP8: Int8Array; +export const HEAP16: Int16Array; +export const HEAP32: Int32Array; +export const HEAPU8: Uint8Array; +export const HEAPU16: Uint16Array; +export const HEAPU32: Uint32Array; +export const HEAPF32: Float32Array; +export const HEAPF64: Float64Array; + +export const TOTAL_STACK: number; +export const TOTAL_MEMORY: number; + +export function count_emval_handles(): number; + +export let onRuntimeInitialized: () => void; diff --git a/example/imgui_impl.js b/example/imgui_impl.js new file mode 100644 index 0000000..b5162e0 --- /dev/null +++ b/example/imgui_impl.js @@ -0,0 +1,339 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +exports.gl = null; +let g_ShaderHandle = null; +let g_VertHandle = null; +let g_FragHandle = null; +let g_AttribLocationTex = null; +let g_AttribLocationProjMtx = null; +let g_AttribLocationPosition = -1; +let g_AttribLocationUV = -1; +let g_AttribLocationColor = -1; +let g_VboHandle = null; +let g_ElementsHandle = null; +let g_FontTexture = null; +let prev_time = 0; +function Init() { + const io = ImGui.GetIO(); + if (typeof (window) !== "undefined") { + const canvas = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + exports.gl = canvas.getContext("webgl", { alpha: false }); + window.addEventListener("blur", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + window.addEventListener("keydown", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + window.addEventListener("keyup", (event) => { + const io = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + window.addEventListener("keypress", (event) => { + const io = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + window.addEventListener("mousemove", (event) => { + const io = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map = [0, 2, 1, 3, 4]; + window.addEventListener("mousedown", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + window.addEventListener("mouseup", (event) => { + const io = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + window.addEventListener("wheel", (event) => { + const io = ImGui.GetIO(); + let scale = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: + scale = 0.01; + break; + case event.DOM_DELTA_LINE: + scale = 0.2; + break; + case event.DOM_DELTA_PAGE: + scale = 1.0; + break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + io.KeyMap[0 /* Tab */] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[1 /* LeftArrow */] = 37; + io.KeyMap[2 /* RightArrow */] = 39; + io.KeyMap[3 /* UpArrow */] = 38; + io.KeyMap[4 /* DownArrow */] = 40; + io.KeyMap[5 /* PageUp */] = 33; + io.KeyMap[6 /* PageDown */] = 34; + io.KeyMap[7 /* Home */] = 36; + io.KeyMap[8 /* End */] = 35; + io.KeyMap[9 /* Delete */] = 46; + io.KeyMap[10 /* Backspace */] = 8; + io.KeyMap[11 /* Enter */] = 13; + io.KeyMap[12 /* Escape */] = 27; + io.KeyMap[13 /* A */] = 65; + io.KeyMap[14 /* C */] = 67; + io.KeyMap[15 /* V */] = 86; + io.KeyMap[16 /* X */] = 88; + io.KeyMap[17 /* Y */] = 89; + io.KeyMap[18 /* Z */] = 90; + // Backup GL state + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D); + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING); + const vertex_shader = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + const fragment_shader = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + g_ShaderHandle = exports.gl && exports.gl.createProgram(); + g_VertHandle = exports.gl && exports.gl.createShader(exports.gl.VERTEX_SHADER); + g_FragHandle = exports.gl && exports.gl.createShader(exports.gl.FRAGMENT_SHADER); + exports.gl && exports.gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + exports.gl && exports.gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + exports.gl && exports.gl.compileShader(g_VertHandle); + exports.gl && exports.gl.compileShader(g_FragHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_VertHandle); + exports.gl && exports.gl.attachShader(g_ShaderHandle, g_FragHandle); + exports.gl && exports.gl.linkProgram(g_ShaderHandle); + g_AttribLocationTex = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = exports.gl && exports.gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = exports.gl && exports.gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + g_VboHandle = exports.gl && exports.gl.createBuffer(); + g_ElementsHandle = exports.gl && exports.gl.createBuffer(); + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + // Create OpenGL texture + g_FontTexture = exports.gl && exports.gl.createTexture(); + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, g_FontTexture); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MIN_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texParameteri(exports.gl.TEXTURE_2D, exports.gl.TEXTURE_MAG_FILTER, exports.gl.LINEAR); + exports.gl && exports.gl.texImage2D(exports.gl.TEXTURE_2D, 0, exports.gl.RGBA, width, height, 0, exports.gl.RGBA, exports.gl.UNSIGNED_BYTE, pixels); + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + // Restore modified GL state + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER_BINDING, last_array_buffer); + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} +exports.Init = Init; +function Shutdown() { + const io = ImGui.GetIO(); + io.Fonts.TexID = null; + exports.gl && exports.gl.deleteTexture(g_FontTexture); + g_FontTexture = null; + exports.gl && exports.gl.deleteBuffer(g_VboHandle); + g_VboHandle = null; + exports.gl && exports.gl.deleteBuffer(g_ElementsHandle); + g_ElementsHandle = null; + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + exports.gl && exports.gl.deleteProgram(g_ShaderHandle); + g_ShaderHandle = null; + exports.gl && exports.gl.deleteShader(g_VertHandle); + g_VertHandle = null; + exports.gl && exports.gl.deleteShader(g_FragHandle); + g_FragHandle = null; + ImGui.Shutdown(); +} +exports.Shutdown = Shutdown; +function NewFrame(time) { + const io = ImGui.GetIO(); + const w = exports.gl && exports.gl.canvas.width || 640; + const h = exports.gl && exports.gl.canvas.height || 480; + const display_w = exports.gl && exports.gl.drawingBufferWidth || w; + const display_h = exports.gl && exports.gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + let dt = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + ImGui.NewFrame(); +} +exports.NewFrame = NewFrame; +function EndFrame() { + ImGui.EndFrame(); + ImGui.Render(); +} +exports.EndFrame = EndFrame; +function RenderDrawLists(draw_data = ImGui.GetDrawData()) { + const io = ImGui.GetIO(); + if (draw_data === null) { + throw new Error(); + } + exports.gl || console.log(draw_data); + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + // Backup GL state + const last_program = exports.gl && exports.gl.getParameter(exports.gl.CURRENT_PROGRAM) || null; + const last_texture = exports.gl && exports.gl.getParameter(exports.gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer = exports.gl && exports.gl.getParameter(exports.gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + exports.gl && exports.gl.enable(exports.gl.BLEND); + exports.gl && exports.gl.blendEquation(exports.gl.FUNC_ADD); + exports.gl && exports.gl.blendFunc(exports.gl.SRC_ALPHA, exports.gl.ONE_MINUS_SRC_ALPHA); + exports.gl && exports.gl.disable(exports.gl.CULL_FACE); + exports.gl && exports.gl.disable(exports.gl.DEPTH_TEST); + exports.gl && exports.gl.enable(exports.gl.SCISSOR_TEST); + exports.gl && exports.gl.activeTexture(exports.gl.TEXTURE0); + // Setup orthographic projection matrix + const ortho_projection = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + exports.gl && exports.gl.useProgram(g_ShaderHandle); + exports.gl && exports.gl.uniform1i(g_AttribLocationTex, 0); + exports.gl && g_AttribLocationProjMtx && exports.gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + // Render command lists + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.enableVertexAttribArray(g_AttribLocationColor); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationPosition, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationUV, 2, exports.gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + exports.gl && exports.gl.vertexAttribPointer(g_AttribLocationColor, 4, exports.gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + const ElemType = exports.gl && ((ImGui.ImDrawIdxSize === 4) ? exports.gl.UNSIGNED_INT : exports.gl.UNSIGNED_SHORT) || 0; + draw_data.IterateDrawLists((draw_list) => { + exports.gl || console.log(draw_list); + exports.gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + exports.gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + exports.gl && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, g_VboHandle); + exports.gl && exports.gl.bufferData(exports.gl.ARRAY_BUFFER, draw_list.VtxBuffer, exports.gl.STREAM_DRAW); + exports.gl && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + exports.gl && exports.gl.bufferData(exports.gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, exports.gl.STREAM_DRAW); + let ElemStart = 0; + draw_list.IterateDrawCmds((draw_cmd) => { + exports.gl || console.log(draw_cmd); + exports.gl || console.log("ElemCount", draw_cmd.ElemCount); + exports.gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl || console.log("TextureId", draw_cmd.TextureId); + if (!exports.gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + exports.gl && exports.gl.bindTexture(exports.gl.TEXTURE_2D, draw_cmd.TextureId); + exports.gl && exports.gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + exports.gl && exports.gl.drawElements(exports.gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + ElemStart += draw_cmd.ElemCount; + }); + }); + // Restore modified state + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationPosition); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationUV); + exports.gl && exports.gl.disableVertexAttribArray(g_AttribLocationColor); + exports.gl && last_program && exports.gl.useProgram(last_program); + exports.gl && last_texture && exports.gl.bindTexture(exports.gl.TEXTURE_2D, last_texture); + exports.gl && last_array_buffer && exports.gl.bindBuffer(exports.gl.ARRAY_BUFFER, last_array_buffer); + exports.gl && last_element_array_buffer && exports.gl.bindBuffer(exports.gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + exports.gl && exports.gl.disable(exports.gl.SCISSOR_TEST); +} +exports.RenderDrawLists = RenderDrawLists; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2ltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFPdkIsUUFBQSxFQUFFLEdBQWlDLElBQUksQ0FBQztBQUNuRCxJQUFJLGNBQWMsR0FBd0IsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7QUFDNUMsSUFBSSxZQUFZLEdBQXVCLElBQUksQ0FBQztBQUM1QyxJQUFJLG1CQUFtQixHQUFnQyxJQUFJLENBQUM7QUFDNUQsSUFBSSx1QkFBdUIsR0FBZ0MsSUFBSSxDQUFDO0FBQ2hFLElBQUksd0JBQXdCLEdBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxrQkFBa0IsR0FBVSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLHFCQUFxQixHQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7QUFDM0MsSUFBSSxnQkFBZ0IsR0FBdUIsSUFBSSxDQUFDO0FBQ2hELElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7QUFFOUMsSUFBSSxTQUFTLEdBQVcsQ0FBQyxDQUFDO0FBRTFCO0lBQ0ksTUFBTSxFQUFFLEdBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWxDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxH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 \ No newline at end of file diff --git a/example/imgui_impl.ts b/example/imgui_impl.ts new file mode 100644 index 0000000..fead343 --- /dev/null +++ b/example/imgui_impl.ts @@ -0,0 +1,377 @@ +import * as ImGui from "../imgui"; +import { ImGuiKey } from "../imgui"; +import { ImGuiIO } from "../imgui"; +import { ImDrawCmd } from "../imgui"; +import { ImDrawList } from "../imgui"; +import { ImDrawData } from "../imgui"; + +export let gl: WebGLRenderingContext | null = null; +let g_ShaderHandle: WebGLProgram | null = null; +let g_VertHandle: WebGLShader | null = null; +let g_FragHandle: WebGLShader | null = null; +let g_AttribLocationTex: WebGLUniformLocation | null = null; +let g_AttribLocationProjMtx: WebGLUniformLocation | null = null; +let g_AttribLocationPosition: GLint = -1; +let g_AttribLocationUV: GLint = -1; +let g_AttribLocationColor: GLint = -1; +let g_VboHandle: WebGLBuffer | null = null; +let g_ElementsHandle: WebGLBuffer | null = null; +let g_FontTexture: WebGLTexture | null = null; + +let prev_time: number = 0; + +export function Init(): void { + const io: ImGuiIO = ImGui.GetIO(); + + if (typeof(window) !== "undefined") { + const canvas: HTMLCanvasElement = document.createElement("canvas"); + canvas.style.position = "absolute"; + canvas.style.left = "0px"; + canvas.style.right = "0px"; + canvas.style.top = "0px"; + canvas.style.bottom = "0px"; + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + window.addEventListener("resize", () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; + }); + document.body.appendChild(canvas); + gl = canvas.getContext("webgl", { alpha: false }); + + window.addEventListener("blur", (event: FocusEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = false; + io.KeyShift = false; + io.KeyAlt = false; + io.KeySuper = false; + for (let i = 0; i < io.KeysDown.length; ++i) { + io.KeysDown[i] = false; + } + for (let i = 0; i < io.MouseDown.length; ++i) { + io.MouseDown[i] = false; + } + }); + + window.addEventListener("keydown", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = true; + if (event.keyCode === 9) { + event.preventDefault(); + } + }); + + window.addEventListener("keyup", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.KeyCtrl = event.ctrlKey; + io.KeyShift = event.shiftKey; + io.KeyAlt = event.altKey; + io.KeySuper = event.metaKey; + io.KeysDown[event.keyCode] = false; + event.preventDefault(); + }); + + window.addEventListener("keypress", (event: KeyboardEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.AddInputCharacter(event.charCode); + event.preventDefault(); + }); + + window.addEventListener("mousemove", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MousePos.x = event.clientX; + io.MousePos.y = event.clientY; + event.preventDefault(); + }); + + // MouseEvent.button + // A number representing a given button: + // 0: Main button pressed, usually the left button or the un-initialized state + // 1: Auxiliary button pressed, usually the wheel button or the middle button (if present) + // 2: Secondary button pressed, usually the right button + // 3: Fourth button, typically the Browser Back button + // 4: Fifth button, typically the Browser Forward button + const mouse_button_map: number[] = [ 0, 2, 1, 3, 4 ]; + + window.addEventListener("mousedown", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = true; + event.preventDefault(); + }); + window.addEventListener("contextmenu", (event: MouseEvent): void => { + event.preventDefault(); + }); + + window.addEventListener("mouseup", (event: MouseEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + io.MouseDown[mouse_button_map[event.button]] = false; + event.preventDefault(); + }); + + window.addEventListener("wheel", (event: WheelEvent): void => { + const io: ImGuiIO = ImGui.GetIO(); + let scale: number = 1.0; + switch (event.deltaMode) { + case event.DOM_DELTA_PIXEL: scale = 0.01; break; + case event.DOM_DELTA_LINE: scale = 0.2; break; + case event.DOM_DELTA_PAGE: scale = 1.0; break; + } + io.MouseWheel = event.wheelDeltaY * scale; // Mouse wheel: 1 unit scrolls about 5 lines text. + event.preventDefault(); + }); + } + + // io.SetClipboardTextFn = ImGui_Impl_SetClipboardText; + // io.GetClipboardTextFn = ImGui_Impl_GetClipboardText; + // io.ClipboardUserData = NULL; + + io.KeyMap[ImGuiKey.Tab] = 9; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. + io.KeyMap[ImGuiKey.LeftArrow] = 37; + io.KeyMap[ImGuiKey.RightArrow] = 39; + io.KeyMap[ImGuiKey.UpArrow] = 38; + io.KeyMap[ImGuiKey.DownArrow] = 40; + io.KeyMap[ImGuiKey.PageUp] = 33; + io.KeyMap[ImGuiKey.PageDown] = 34; + io.KeyMap[ImGuiKey.Home] = 36; + io.KeyMap[ImGuiKey.End] = 35; + io.KeyMap[ImGuiKey.Delete] = 46; + io.KeyMap[ImGuiKey.Backspace] = 8; + io.KeyMap[ImGuiKey.Enter] = 13; + io.KeyMap[ImGuiKey.Escape] = 27; + io.KeyMap[ImGuiKey.A] = 65; + io.KeyMap[ImGuiKey.C] = 67; + io.KeyMap[ImGuiKey.V] = 86; + io.KeyMap[ImGuiKey.X] = 88; + io.KeyMap[ImGuiKey.Y] = 89; + io.KeyMap[ImGuiKey.Z] = 90; + + // Backup GL state + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D); + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING); + + const vertex_shader: string[] = [ + "uniform mat4 ProjMtx;", + "attribute vec2 Position;", + "attribute vec2 UV;", + "attribute vec4 Color;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " Frag_UV = UV;", + " Frag_Color = Color;", + " gl_Position = ProjMtx * vec4(Position.xy,0,1);", + "}", + ]; + + const fragment_shader: string[] = [ + // #ifdef __EMSCRIPTEN__ + // WebGL requires precision specifiers but OpenGL 2.1 disallows + // them, so I define the shader without it and then add it here. + "precision mediump float;", + // #endif + "uniform sampler2D Texture;", + "varying vec2 Frag_UV;", + "varying vec4 Frag_Color;", + "void main() {", + " gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV);", + "}", + ]; + + g_ShaderHandle = gl && gl.createProgram(); + g_VertHandle = gl && gl.createShader(gl.VERTEX_SHADER); + g_FragHandle = gl && gl.createShader(gl.FRAGMENT_SHADER); + gl && gl.shaderSource(g_VertHandle, vertex_shader.join("\n")); + gl && gl.shaderSource(g_FragHandle, fragment_shader.join("\n")); + gl && gl.compileShader(g_VertHandle); + gl && gl.compileShader(g_FragHandle); + gl && gl.attachShader(g_ShaderHandle, g_VertHandle); + gl && gl.attachShader(g_ShaderHandle, g_FragHandle); + gl && gl.linkProgram(g_ShaderHandle); + + g_AttribLocationTex = gl && gl.getUniformLocation(g_ShaderHandle, "Texture"); + g_AttribLocationProjMtx = gl && gl.getUniformLocation(g_ShaderHandle, "ProjMtx"); + g_AttribLocationPosition = gl && gl.getAttribLocation(g_ShaderHandle, "Position") || 0; + g_AttribLocationUV = gl && gl.getAttribLocation(g_ShaderHandle, "UV") || 0; + g_AttribLocationColor = gl && gl.getAttribLocation(g_ShaderHandle, "Color") || 0; + + g_VboHandle = gl && gl.createBuffer(); + g_ElementsHandle = gl && gl.createBuffer(); + + // Build texture + // const width: number = 256; + // const height: number = 256; + // const pixels: Uint8Array = new Uint8Array(4 * width * height).fill(0xff); + const { width, height, pixels } = io.Fonts.GetTexDataAsRGBA32(); // Load as RGBA 32-bits for OpenGL3 demo because it is more likely to be compatible with user's existing shader. + // console.log(`font texture ${width} x ${height} @ ${pixels.length}`); + + // Create OpenGL texture + g_FontTexture = gl && gl.createTexture(); + gl && gl.bindTexture(gl.TEXTURE_2D, g_FontTexture); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl && gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl && gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixels); + + // Store our identifier + io.Fonts.TexID = g_FontTexture || { foo: "bar" }; + // console.log("font texture id", g_FontTexture); + + // Cleanup (don't clear the input data if you want to append new fonts later) + // io.Fonts.ClearInputData(); + // io.Fonts.ClearTexData(); + + // Restore modified GL state + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER_BINDING, last_array_buffer); + + // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) + // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so. + // If text or lines are blurry when integrating ImGui in your engine: in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) + // io.RenderDrawListsFn = draw_frame; +} + +export function Shutdown(): void { + const io: ImGuiIO = ImGui.GetIO(); + + io.Fonts.TexID = null; + gl && gl.deleteTexture(g_FontTexture); g_FontTexture = null; + + gl && gl.deleteBuffer(g_VboHandle); g_VboHandle = null; + gl && gl.deleteBuffer(g_ElementsHandle); g_ElementsHandle = null; + + g_AttribLocationTex = null; + g_AttribLocationProjMtx = null; + g_AttribLocationPosition = -1; + g_AttribLocationUV = -1; + g_AttribLocationColor = -1; + + gl && gl.deleteProgram(g_ShaderHandle); g_ShaderHandle = null; + gl && gl.deleteShader(g_VertHandle); g_VertHandle = null; + gl && gl.deleteShader(g_FragHandle); g_FragHandle = null; + + ImGui.Shutdown(); +} + +export function NewFrame(time: number): void { + const io: ImGuiIO = ImGui.GetIO(); + + const w: number = gl && gl.canvas.width || 640; + const h: number = gl && gl.canvas.height || 480; + const display_w: number = gl && gl.drawingBufferWidth || w; + const display_h: number = gl && gl.drawingBufferHeight || h; + io.DisplaySize.x = w; + io.DisplaySize.y = h; + io.DisplayFramebufferScale.x = w > 0 ? (display_w / w) : 0; + io.DisplayFramebufferScale.y = h > 0 ? (display_h / h) : 0; + + let dt: number = time - prev_time; + prev_time = time; + io.DeltaTime = dt / 1000; + + ImGui.NewFrame(); +} + +export function EndFrame(): void { + ImGui.EndFrame(); + + ImGui.Render(); +} + +export function RenderDrawLists(draw_data: ImDrawData | null = ImGui.GetDrawData()): void { + const io: ImGuiIO = ImGui.GetIO(); + if (draw_data === null) { throw new Error(); } + + gl || console.log(draw_data); + + // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) + const fb_width: number = io.DisplaySize.x * io.DisplayFramebufferScale.x; + const fb_height: number = io.DisplaySize.y * io.DisplayFramebufferScale.y; + if (fb_width == 0 || fb_height == 0) { + return; + } + draw_data.ScaleClipRects(io.DisplayFramebufferScale); + + // Backup GL state + const last_program: WebGLProgram | null = gl && gl.getParameter(gl.CURRENT_PROGRAM) || null; + const last_texture: WebGLTexture | null = gl && gl.getParameter(gl.TEXTURE_BINDING_2D) || null; + const last_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ARRAY_BUFFER_BINDING) || null; + const last_element_array_buffer: WebGLBuffer | null = gl && gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING) || null; + + // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled + gl && gl.enable(gl.BLEND); + gl && gl.blendEquation(gl.FUNC_ADD); + gl && gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl && gl.disable(gl.CULL_FACE); + gl && gl.disable(gl.DEPTH_TEST); + gl && gl.enable(gl.SCISSOR_TEST); + gl && gl.activeTexture(gl.TEXTURE0); + + // Setup orthographic projection matrix + const ortho_projection: Float32Array = new Float32Array([ + 2.0 / io.DisplaySize.x, 0.0, 0.0, 0.0, + 0.0, -2.0 / io.DisplaySize.y, 0.0, 0.0, + 0.0, 0.0, -1.0, 0.0, + -1.0, 1.0, 0.0, 1.0, + ]); + gl && gl.useProgram(g_ShaderHandle); + gl && gl.uniform1i(g_AttribLocationTex, 0); + gl && g_AttribLocationProjMtx && gl.uniformMatrix4fv(g_AttribLocationProjMtx, false, ortho_projection); + + // Render command lists + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.enableVertexAttribArray(g_AttribLocationPosition); + gl && gl.enableVertexAttribArray(g_AttribLocationUV); + gl && gl.enableVertexAttribArray(g_AttribLocationColor); + + gl && gl.vertexAttribPointer(g_AttribLocationPosition, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertPosOffset); + gl && gl.vertexAttribPointer(g_AttribLocationUV, 2, gl.FLOAT, false, ImGui.ImDrawVertSize, ImGui.ImDrawVertUVOffset); + gl && gl.vertexAttribPointer(g_AttribLocationColor, 4, gl.UNSIGNED_BYTE, true, ImGui.ImDrawVertSize, ImGui.ImDrawVertColOffset); + + const ElemType: GLenum = gl && ((ImGui.ImDrawIdxSize === 4) ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT) || 0; + + draw_data.IterateDrawLists((draw_list: ImDrawList): void => { + gl || console.log(draw_list); + gl || console.log("VtxBuffer.length", draw_list.VtxBuffer.length); + gl || console.log("IdxBuffer.length", draw_list.IdxBuffer.length); + + gl && gl.bindBuffer(gl.ARRAY_BUFFER, g_VboHandle); + gl && gl.bufferData(gl.ARRAY_BUFFER, draw_list.VtxBuffer, gl.STREAM_DRAW); + gl && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g_ElementsHandle); + gl && gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, draw_list.IdxBuffer, gl.STREAM_DRAW); + + let ElemStart: number = 0; + + draw_list.IterateDrawCmds((draw_cmd: ImDrawCmd): void => { + gl || console.log(draw_cmd); + gl || console.log("ElemCount", draw_cmd.ElemCount); + gl || console.log("ClipRect", draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl || console.log("TextureId", draw_cmd.TextureId); + if (!gl) { + console.log("i: pos.x pos.y uv.x uv.y col"); + for (let i = 0; i < Math.min(3, draw_cmd.ElemCount); ++i) { + const view: ImGui.ImDrawVert = new ImGui.ImDrawVert(draw_list.VtxBuffer.buffer, draw_list.VtxBuffer.byteOffset + i * ImGui.ImDrawVertSize); + console.log(`${i}: ${view.pos[0].toFixed(2)} ${view.pos[1].toFixed(2)} ${view.uv[0].toFixed(5)} ${view.uv[1].toFixed(5)} ${("00000000" + view.col[0].toString(16)).substr(-8)}`); + } + } + + gl && gl.bindTexture(gl.TEXTURE_2D, draw_cmd.TextureId); + gl && gl.scissor(draw_cmd.ClipRect.x, fb_height - draw_cmd.ClipRect.w, draw_cmd.ClipRect.z - draw_cmd.ClipRect.x, draw_cmd.ClipRect.w - draw_cmd.ClipRect.y); + gl && gl.drawElements(gl.TRIANGLES, draw_cmd.ElemCount, ElemType, ElemStart * ImGui.ImDrawIdxSize); + + ElemStart += draw_cmd.ElemCount; + }); + }); + + // Restore modified state + gl && gl.disableVertexAttribArray(g_AttribLocationPosition); + gl && gl.disableVertexAttribArray(g_AttribLocationUV); + gl && gl.disableVertexAttribArray(g_AttribLocationColor); + gl && last_program && gl.useProgram(last_program); + gl && last_texture && gl.bindTexture(gl.TEXTURE_2D, last_texture); + gl && last_array_buffer && gl.bindBuffer(gl.ARRAY_BUFFER, last_array_buffer); + gl && last_element_array_buffer && gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, last_element_array_buffer); + gl && gl.disable(gl.SCISSOR_TEST); +} diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..ab5b0e4 --- /dev/null +++ b/example/index.html @@ -0,0 +1,26 @@ + + + ImGui JavaScript+WebGL example + + + + + diff --git a/example/index.js b/example/index.js new file mode 100644 index 0000000..e1e9266 --- /dev/null +++ b/example/index.js @@ -0,0 +1,26 @@ +/// + +process.chdir(__dirname); + +global.SystemJS = require("systemjs"); + +[ "fs", "path" ].forEach(function (id) { + SystemJS.set(id, SystemJS.newModule(require(id))); +}); + +SystemJS.config({ + packages: { + "./bind-imgui": { + main: "../bind-imgui.js", + format: "global", + defaultExtension: 'js', + meta: { "../bind-imgui.js": { exports: "Module" } } + }, + "..": { defaultExtension: "js" }, + ".": { defaultExtension: "js" } + } +}); + +SystemJS.import("./main") +.then(function (main) { main.default(); }) +.catch(console.error); diff --git a/example/main.js b/example/main.js new file mode 100644 index 0000000..e09c16b --- /dev/null +++ b/example/main.js @@ -0,0 +1,108 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ImGui = require("../imgui"); +const ImGui_Impl = require("./imgui_impl"); +const bindImGui = require("../bind-imgui"); +const imgui_1 = require("../imgui"); +const imgui_2 = require("../imgui"); +const imgui_demo_1 = require("../imgui_demo"); +const imgui_memory_editor_1 = require("../imgui_memory_editor"); +function main() { + // Setup ImGui binding + ImGui_Impl.Init(); + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + let show_demo_window = true; + let show_another_window = false; + let clear_color = new imgui_2.ImVec4(0.45, 0.55, 0.60, 1.00); + /* static */ let f = 0.0; + const memory_editor = new imgui_memory_editor_1.MemoryEditor(); + // Main loop + let done = false; + function _loop(time) { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, 64 /* AlwaysAutoResize */); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new imgui_1.ImVec2(650, 20), 4 /* FirstUseEver */); // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ imgui_demo_1.ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + ImGui_Impl.EndFrame(); + // Rendering + const gl = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + ImGui_Impl.RenderDrawLists(); + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + function _done() { + // Cleanup + ImGui_Impl.Shutdown(); + } + if (typeof (window) !== "undefined") { + window.requestAnimationFrame(_loop); + } + else { + _loop(1.0 / 60.0); + _done(); + } +} +exports.default = main; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxvQ0FBa0M7QUFDbEMsb0NBQWtDO0FBQ2xDLDhDQUErQztBQUUvQyxnRUFBc0Q7QUFFdEQ7SUFDSSxzQkFBc0I7SUFDdEIsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWxCLGNBQWM7SUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMzQiwwQkFBMEI7SUFFMUIsYUFBYTtJQUNiLHdKQUF3SjtJQUN4SixxSEFBcUg7SUFDckgsdUtBQXVLO0lBQ3ZLLGtNQUFrTTtJQUNsTSxxRUFBcUU7SUFDckUsOEhBQThIO0lBQzlILG9DQUFvQztJQUNwQyw0QkFBNEI7SUFDNUIsOEVBQThFO0lBQzlFLGdGQUFnRjtJQUNoRiwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHNJQUFzSTtJQUN0SSwyQkFBMkI7SUFFM0IsSUFBSSxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDckMsSUFBSSxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQVcsSUFBSSxjQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBaUIsSUFBSSxrQ0FBWSxFQUFFLENBQUM7SUFFdkQsWUFBWTtJQUNaLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLElBQVk7UUFDdkIscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyx1R0FBdUc7UUFDdkcsd0hBQXdIO1FBQ3hILFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsMEJBQTBCO1FBQzFCLGtIQUFrSDtRQUNsSCxDQUFDO1lB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 \ No newline at end of file diff --git a/example/main.ts b/example/main.ts new file mode 100644 index 0000000..d143e04 --- /dev/null +++ b/example/main.ts @@ -0,0 +1,121 @@ +import * as ImGui from "../imgui"; +import * as ImGui_Impl from "./imgui_impl"; +import * as bindImGui from "../bind-imgui"; +import { ImVec2 } from "../imgui"; +import { ImVec4 } from "../imgui"; +import { ShowDemoWindow } from "../imgui_demo"; + +import { MemoryEditor } from "../imgui_memory_editor"; + +export default function main(): void { + // Setup ImGui binding + ImGui_Impl.Init(); + + // Setup style + ImGui.StyleColorsClassic(); + //ImGui.StyleColorsDark(); + + // Load Fonts + // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. + // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. + // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). + // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. + // - Read 'extra_fonts/README.txt' for more instructions and details. + // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! + //const io: ImGuiIO = ImGui.GetIO(); + //io.Fonts.AddFontDefault(); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Roboto-Medium.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/Cousine-Regular.ttf", 15.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/DroidSans.ttf", 16.0); + //io.Fonts.AddFontFromFileTTF("../imgui/extra_fonts/ProggyTiny.ttf", 10.0); + //const font: ImFont = io.Fonts.AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0, null, io.Fonts.GetGlyphRangesJapanese()); + //IM_ASSERT(font !== null); + + let show_demo_window: boolean = true; + let show_another_window: boolean = false; + let clear_color: ImVec4 = new ImVec4(0.45, 0.55, 0.60, 1.00); + + /* static */ let f: number = 0.0; + + const memory_editor: MemoryEditor = new MemoryEditor(); + + // Main loop + let done: boolean = false; + function _loop(time: number): void { + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + ImGui_Impl.NewFrame(time); + + // 1. Show a simple window + // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets automatically appears in a window called "Debug". + { + // static float f = 0.0f; + ImGui.Text("Hello, world!"); // Some text (you can use a format string too) + ImGui.SliderFloat("float", (value = f) => f = value, 0.0, 1.0); // Edit 1 float as a slider from 0.0f to 1.0f + ImGui.ColorEdit3("clear color", clear_color); // Edit 3 floats as a color + if (ImGui.Button("Demo Window")) // Use buttons to toggle our bools. We could use Checkbox() as well. + show_demo_window = !show_demo_window; + if (ImGui.Button("Another Window")) + show_another_window = !show_another_window; + ImGui.Text(`Application average ${(1000.0 / ImGui.GetIO().Framerate).toFixed(3)} ms/frame (${ImGui.GetIO().Framerate.toFixed(1)} FPS)`); + + if (ImGui.Button("Memory Editor")) + memory_editor.Open = !memory_editor.Open; + if (memory_editor.Open) + memory_editor.DrawWindow("Memory Editor", bindImGui.buffer); + const mi: bindImGui.mallinfo = bindImGui.mallinfo(); + // ImGui.Text(`Total non-mmapped bytes (arena): ${mi.arena}`); + // ImGui.Text(`# of free chunks (ordblks): ${mi.ordblks}`); + // ImGui.Text(`# of free fastbin blocks (smblks): ${mi.smblks}`); + // ImGui.Text(`# of mapped regions (hblks): ${mi.hblks}`); + // ImGui.Text(`Bytes in mapped regions (hblkhd): ${mi.hblkhd}`); + ImGui.Text(`Max. total allocated space (usmblks): ${mi.usmblks}`); + // ImGui.Text(`Free bytes held in fastbins (fsmblks): ${mi.fsmblks}`); + ImGui.Text(`Total allocated space (uordblks): ${mi.uordblks}`); + ImGui.Text(`Total free space (fordblks): ${mi.fordblks}`); + // ImGui.Text(`Topmost releasable block (keepcost): ${mi.keepcost}`); + } + + // 2. Show another simple window. In most cases you will use an explicit Begin/End pair to name the window. + if (show_another_window) { + ImGui.Begin("Another Window", (value = show_another_window) => show_another_window = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text("Hello from another window!"); + ImGui.End(); + } + + // 3. Show the ImGui demo window. Most of the sample code is in ImGui::ShowDemoWindow(). + if (show_demo_window) { + ImGui.SetNextWindowPos(new ImVec2(650, 20), ImGui.Cond.FirstUseEver) // Normally user code doesn't need/want to call this because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly! + /*ImGui.*/ShowDemoWindow((value = show_demo_window) => show_demo_window = value); + } + + ImGui_Impl.EndFrame(); + + // Rendering + const gl: WebGLRenderingContext | null = ImGui_Impl.gl; + gl && gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); + gl && gl.clearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); + gl && gl.clear(gl.COLOR_BUFFER_BIT); + //gl.useProgram(0); // You may want this if using this code in an OpenGL 3+ context where shaders may be bound + + ImGui_Impl.RenderDrawLists(); + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(done ? _done : _loop); + } + } + + function _done(): void { + // Cleanup + ImGui_Impl.Shutdown(); + } + + if (typeof(window) !== "undefined") { + window.requestAnimationFrame(_loop); + } else { + _loop(1.0 / 60.0); + _done(); + } +} diff --git a/example/tsconfig.json b/example/tsconfig.json new file mode 100644 index 0000000..777336a --- /dev/null +++ b/example/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "main.ts", + "imgui_impl.ts" + ] +} \ No newline at end of file diff --git a/imconfig.js b/imconfig.js new file mode 100644 index 0000000..e090c3e --- /dev/null +++ b/imconfig.js @@ -0,0 +1,51 @@ +"use strict"; +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +exports.IMGUI_USE_BGRA_PACKED_COLOR = false; +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0VBQStFO0FBQy9FLHNCQUFzQjtBQUN0QixxREFBcUQ7QUFDckQsaUlBQWlJO0FBQ2pJLCtFQUErRTs7QUFFL0UsZUFBZTtBQUVmLDhEQUE4RDtBQUM5RCwyQ0FBMkM7QUFFM0MscUZBQXFGO0FBQ3JGLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFFM0MsK0pBQStKO0FBQy9KLDBDQUEwQztBQUUxQyxpREFBaUQ7QUFDakQsb0NBQW9DO0FBRXBDLHVIQUF1SDtBQUN2SCx5REFBeUQ7QUFDekQsbURBQW1EO0FBRW5ELDRIQUE0SDtBQUM1SCwwSUFBMEk7QUFDMUksb0NBQW9DO0FBRXBDLGdHQUFnRztBQUNoRywrQ0FBK0M7QUFFL0MsbUdBQW1HO0FBQ25HLHFDQUFxQztBQUN4QixRQUFBLDJCQUEyQixHQUFZLEtBQUssQ0FBQztBQUUxRCx3RUFBd0U7QUFDeEUsMENBQTBDO0FBRTFDLG9IQUFvSDtBQUNwSDs7Ozs7Ozs7RUFRRTtBQUVGLHlHQUF5RztBQUN6RyxnQ0FBZ0M7QUFFaEMsd0dBQXdHO0FBQ3hHLG9IQUFvSDtBQUNwSDs7Ozs7RUFLRSJ9 \ No newline at end of file diff --git a/imconfig.ts b/imconfig.ts new file mode 100644 index 0000000..b6579a7 --- /dev/null +++ b/imconfig.ts @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------------- +// USER IMPLEMENTATION +// This file contains compile-time options for ImGui. +// Other options (memory allocation overrides, callbacks, etc.) can be set at runtime via the ImGuiIO structure - ImGui::GetIO(). +//----------------------------------------------------------------------------- + +// #pragma once + +//---- Define assertion handler. Defaults to calling assert(). +//#define IM_ASSERT(_EXPR) MyAssert(_EXPR) + +//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows. +//#define IMGUI_API __declspec( dllexport ) +//#define IMGUI_API __declspec( dllimport ) + +//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names +//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS + +//---- Include imgui_user.h at the end of imgui.h +//#define IMGUI_INCLUDE_IMGUI_USER_H + +//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) +//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS +//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS + +//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty) +//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp to learn why. +//#define IMGUI_DISABLE_DEMO_WINDOWS + +//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself. +//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS + +//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends) +//#define IMGUI_USE_BGRA_PACKED_COLOR +export const IMGUI_USE_BGRA_PACKED_COLOR: boolean = false; + +//---- Implement STB libraries in a namespace to avoid linkage conflicts +//#define IMGUI_STB_NAMESPACE ImGuiStb + +//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4. +/* +#define IM_VEC2_CLASS_EXTRA \ + ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \ + operator MyVec2() const { return MyVec2(x,y); } + +#define IM_VEC4_CLASS_EXTRA \ + ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; } \ + operator MyVec4() const { return MyVec4(x,y,z,w); } +*/ + +//---- Use 32-bit vertex indices (instead of default: 16-bit) to allow meshes with more than 64K vertices +//#define ImDrawIdx unsigned int + +//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files. +//---- e.g. create variants of the ImGui::Value() helper for your low-level math types, or your own widgets/helpers. +/* +namespace ImGui +{ + void Value(const char* prefix, const MyMatrix44& v, const char* float_format = NULL); +} +*/ diff --git a/imgui.js b/imgui.js new file mode 100644 index 0000000..0fc91d6 --- /dev/null +++ b/imgui.js @@ -0,0 +1,2845 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bind = require("./bind-imgui"); +const config = require("./imconfig"); +var bind_imgui_1 = require("./bind-imgui"); +exports.IMGUI_VERSION = bind_imgui_1.IMGUI_VERSION; +function IM_ASSERT(_EXPR) { if (!_EXPR) { + throw new Error(); +} } +exports.IM_ASSERT = IM_ASSERT; +function IM_ARRAYSIZE(_ARR) { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } + else { + return _ARR.length; + } +} +exports.IM_ARRAYSIZE = IM_ARRAYSIZE; +class ImStringBuffer { + constructor(size, buffer = "") { + this.size = size; + this.buffer = buffer; + } +} +exports.ImStringBuffer = ImStringBuffer; +var bind_imgui_2 = require("./bind-imgui"); +exports.reference_ImVec2 = bind_imgui_2.reference_ImVec2; +class ImVec2 { + constructor(x = 0.0, y = 0.0) { + this.x = x; + this.y = y; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + return true; + } +} +ImVec2.ZERO = new ImVec2(0.0, 0.0); +ImVec2.UNIT = new ImVec2(1.0, 1.0); +ImVec2.UNIT_X = new ImVec2(1.0, 0.0); +ImVec2.UNIT_Y = new ImVec2(0.0, 1.0); +exports.ImVec2 = ImVec2; +var bind_imgui_3 = require("./bind-imgui"); +exports.reference_ImVec4 = bind_imgui_3.reference_ImVec4; +class ImVec4 { + constructor(x = 0.0, y = 0.0, z = 0.0, w = 1.0) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + Copy(other) { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + Equals(other) { + if (this.x !== other.x) { + return false; + } + if (this.y !== other.y) { + return false; + } + if (this.z !== other.z) { + return false; + } + if (this.w !== other.w) { + return false; + } + return true; + } +} +ImVec4.ZERO = new ImVec4(0.0, 0.0, 0.0, 0.0); +ImVec4.UNIT = new ImVec4(1.0, 1.0, 1.0, 1.0); +ImVec4.UNIT_X = new ImVec4(1.0, 0.0, 0.0, 0.0); +ImVec4.UNIT_Y = new ImVec4(0.0, 1.0, 0.0, 0.0); +ImVec4.UNIT_Z = new ImVec4(0.0, 0.0, 1.0, 0.0); +ImVec4.UNIT_W = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.BLACK = new ImVec4(0.0, 0.0, 0.0, 1.0); +ImVec4.WHITE = new ImVec4(1.0, 1.0, 1.0, 1.0); +exports.ImVec4 = ImVec4; +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +class ImVector { + constructor() { + this.Data = []; + // public: + // int Size; + // int Capacity; + // T* Data; + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } + } + get Size() { return this.Data.length; } + empty() { return this.Data.length === 0; } + clear() { this.Data.length = 0; } + pop_back() { return this.Data.pop(); } + push_back(value) { this.Data.push(value); } +} +exports.ImVector = ImVector; +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +class ImGuiTextFilter { + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter = "") { + // struct TextRange + // { + // const char* b; + // const char* e; + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + // char InputBuf[256]; + this.InputBuf = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + this.CountGrep = 0; + if (default_filter) { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + Draw(label = "Filter (inc,-exc)", width = 0.0) { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + PassFilter(text, text_end = null) { + // if (Filters.empty()) + // return true; + // if (text == NULL) + // text = ""; + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + // Implicit * grep + if (this.CountGrep === 0) + return true; + return false; + } + // IMGUI_API void Build(); + Build() { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + Clear() { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + IsActive() { return false; } +} +exports.ImGuiTextFilter = ImGuiTextFilter; +// Helper: Text buffer for logging/accumulating text +class ImGuiTextBuffer { + constructor() { + // ImVector Buf; + this.Buf = ""; + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); + } + begin() { return this.Buf; } + size() { return this.Buf.length; } + clear() { this.Buf = ""; } + append(text) { this.Buf += text; } +} +exports.ImGuiTextBuffer = ImGuiTextBuffer; +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +class ImGuiStorage { +} +exports.ImGuiStorage = ImGuiStorage; +// Data payload for Drag and Drop operations +class ImGuiPayload { +} +exports.ImGuiPayload = ImGuiPayload; +// Helpers macros to generate 32-bits encoded colors +exports.IM_COL32_R_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +exports.IM_COL32_G_SHIFT = 8; +exports.IM_COL32_B_SHIFT = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +exports.IM_COL32_A_SHIFT = 24; +exports.IM_COL32_A_MASK = 0xFF000000; +function IM_COL32(R, G, B, A = 255) { + return ((A << exports.IM_COL32_A_SHIFT) | (B << exports.IM_COL32_B_SHIFT) | (G << exports.IM_COL32_G_SHIFT) | (R << exports.IM_COL32_R_SHIFT)) >>> 0; +} +exports.IM_COL32 = IM_COL32; +exports.IM_COL32_WHITE = IM_COL32(255, 255, 255, 255); // Opaque white = 0xFFFFFFFF +exports.IM_COL32_BLACK = IM_COL32(0, 0, 0, 255); // Opaque black +exports.IM_COL32_BLACK_TRANS = IM_COL32(0, 0, 0, 0); // Transparent black = 0x00000000 +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +class ImColor { + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { + // ImVec4 Value; + this.Value = new ImVec4(); + if (typeof (r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> exports.IM_COL32_A_SHIFT) & 0xFF) / 255)); + } + else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } + else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } + else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32() { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4() { return this.Value; } + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h, s, v, a = 1.0) { + const ref_r = [this.Value.x]; + const ref_g = [this.Value.y]; + const ref_b = [this.Value.z]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h, s, v, a = 1.0) { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} +exports.ImColor = ImColor; +exports.ImGuiTextEditDefaultSize = 128; +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +class ImGuiTextEditCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + get EventFlag() { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + get Flags() { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + get UserData() { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + get ReadOnly() { return this.native.ReadOnly; } + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + get EventChar() { return this.native.EventChar; } + set EventChar(value) { this.native.EventChar = value; } + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + get EventKey() { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + get Buf() { return this.native.getBuf(); } + set Buf(value) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + get BufTextLen() { return this.native.BufTextLen; } + set BufTextLen(value) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + get BufSize() { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + set BufDirty(value) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + get CursorPos() { return this.native.CursorPos; } + set CursorPos(value) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + get SelectionStart() { return this.native.SelectionStart; } + set SelectionStart(value) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + get SelectionEnd() { return this.native.SelectionEnd; } + set SelectionEnd(value) { this.native.SelectionEnd = value; } + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + DeleteChars(pos, bytes_count) { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + InsertChars(pos, text, text_end = null) { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + HasSelection() { return this.native.HasSelection(); } +} +exports.ImGuiTextEditCallbackData = ImGuiTextEditCallbackData; +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +class ImGuiSizeConstraintCallbackData { + constructor(native) { + this.native = native; + } + delete() { if (this.native) { + this.native.delete(); + delete this.native; + } } + get UserData() { return this.native.UserData; } + get Pos() { return this.native.getPos(); } + get CurrentSize() { return this.native.getCurrentSize(); } + get DesiredSize() { return this.native.getDesiredSize(); } +} +exports.ImGuiSizeConstraintCallbackData = ImGuiSizeConstraintCallbackData; +class ImGuiListClipper { + get StartPosY() { return this.native.StartPosY; } + get ItemsHeight() { return this.native.ItemsHeight; } + get ItemsCount() { return this.native.ItemsCount; } + get StepNo() { return this.native.StepNo; } + get DisplayStart() { return this.native.DisplayStart; } + get DisplayEnd() { return this.native.DisplayEnd; } + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count = -1, items_height = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete() { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + Step() { + if (!this.native) { + throw new Error(); + } + const busy = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + Begin(items_count, items_height) { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + End() { + if (!this.native) { + throw new Error(); + } + this.native.End(); + this.delete(); + } +} +exports.ImGuiListClipper = ImGuiListClipper; +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +class ImDrawCmd { + constructor(native) { + this.native = native; + } + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount() { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect() { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId() { return this.native.TextureId; } +} +exports.ImDrawCmd = ImDrawCmd; +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +var bind_imgui_4 = require("./bind-imgui"); +exports.ImDrawIdxSize = bind_imgui_4.ImDrawIdxSize; +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +var bind_imgui_5 = require("./bind-imgui"); +exports.ImDrawVertSize = bind_imgui_5.ImDrawVertSize; +var bind_imgui_6 = require("./bind-imgui"); +exports.ImDrawVertPosOffset = bind_imgui_6.ImDrawVertPosOffset; +var bind_imgui_7 = require("./bind-imgui"); +exports.ImDrawVertUVOffset = bind_imgui_7.ImDrawVertUVOffset; +var bind_imgui_8 = require("./bind-imgui"); +exports.ImDrawVertColOffset = bind_imgui_8.ImDrawVertColOffset; +class ImDrawVert { + constructor(buffer, byteOffset = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +exports.ImDrawVert = ImDrawVert; +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +class ImDrawChannel { +} +exports.ImDrawChannel = ImDrawChannel; +class ImDrawListSharedData { + constructor(native) { + this.native = native; + } +} +exports.ImDrawListSharedData = ImDrawListSharedData; +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +class ImDrawList { + constructor(native) { + this.native = native; + } + IterateDrawCmds(callback) { + this.native.IterateDrawCmds((draw_cmd, ElemStart) => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer() { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer() { return this.native.VtxBuffer; } + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect = false) { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + PushClipRectFullScreen() { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + PopClipRect() { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + AddLine(a, b, col, thickness = 1.0) { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + AddRect(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */, thickness = 1.0) { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + AddRectFilled(a, b, col, rounding = 0.0, rounding_corners_flags = 15 /* All */) { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left) { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + AddQuad(a, b, c, d, col, thickness = 1.0) { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + AddQuadFilled(a, b, c, d, col) { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + AddTriangle(a, b, c, col, thickness = 1.0) { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + AddTriangleFilled(a, b, c, col) { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + AddCircle(centre, radius, col, num_segments = 12, thickness = 1.0) { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + AddCircleFilled(centre, radius, col, num_segments = 12) { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + AddText(pos, col, text_begin, text_end = null) { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + AddText_Font(font, font_size, pos, col, text_begin, text_end = null, wrap_width = 0.0, cpu_fine_clip_rect = null) { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness = 1.0, num_segments = 0) { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } +} +exports.ImDrawList = ImDrawList; +// All draw data to render an ImGui frame +class ImDrawData { + constructor(native) { + this.native = native; + } + IterateDrawLists(callback) { + this.native.IterateDrawLists((draw_list) => { + callback(new ImDrawList(draw_list)); + }); + } + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid() { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount() { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount() { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount() { return this.native.TotalIdxCount; } + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + ScaleClipRects(sc) { + this.native.ScaleClipRects(sc); + } +} +exports.ImDrawData = ImDrawData; +class ImFontConfig { +} +exports.ImFontConfig = ImFontConfig; +// struct ImFontGlyph +class ImFontGlyph { +} +exports.ImFontGlyph = ImFontGlyph; +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +class ImFontAtlas { + constructor(native) { + this.native = native; + } + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32() { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + //------------------------------------------- + // Members + //------------------------------------------- + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID() { return this.native.getTexID(); } + set TexID(value) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth() { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight() { return this.native.TexHeight; } +} +exports.ImFontAtlas = ImFontAtlas; +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +class ImFont { + constructor(native) { + this.native = native; + } + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName() { return this.native.GetDebugName(); } +} +exports.ImFont = ImFont; +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle { + constructor() { + this.Alpha = 1.0; // Global alpha applies to everything in ImGui + this.WindowPadding = new ImVec2(8, 8); // Padding within a window + this.WindowRounding = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + this.WindowBorderSize = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.WindowMinSize = new ImVec2(32, 32); // Minimum window size + this.WindowTitleAlign = new ImVec2(0.0, 0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + this.ChildRounding = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + this.ChildBorderSize = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.PopupRounding = 0.0; // Radius of popup window corners rounding. + this.PopupBorderSize = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.FramePadding = new ImVec2(4, 3); // Padding within a framed rectangle (used by most widgets) + this.FrameRounding = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + this.FrameBorderSize = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + this.ItemSpacing = new ImVec2(8, 4); // Horizontal and vertical spacing between widgets/lines + this.ItemInnerSpacing = new ImVec2(4, 4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + this.TouchExtraPadding = new ImVec2(0, 0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + this.IndentSpacing = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + this.ColumnsMinSpacing = 6.0; // Minimum horizontal spacing between two columns + this.ScrollbarSize = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + this.ScrollbarRounding = 9.0; // Radius of grab corners for scrollbar + this.GrabMinSize = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + this.GrabRounding = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + this.ButtonTextAlign = new ImVec2(0.5, 0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + this.DisplayWindowPadding = new ImVec2(22, 22); // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + this.DisplaySafeAreaPadding = new ImVec2(4, 4); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + this.AntiAliasedLines = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + this.AntiAliasedFill = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + this.CurveTessellationTol = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + this.Colors = []; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + getWindowPadding() { return this.WindowPadding; } + getWindowMinSize() { return this.WindowMinSize; } + getWindowTitleAlign() { return this.WindowTitleAlign; } + getFramePadding() { return this.FramePadding; } + getItemSpacing() { return this.ItemSpacing; } + getItemInnerSpacing() { return this.ItemInnerSpacing; } + getTouchExtraPadding() { return this.TouchExtraPadding; } + getButtonTextAlign() { return this.ButtonTextAlign; } + getDisplayWindowPadding() { return this.DisplayWindowPadding; } + getDisplaySafeAreaPadding() { return this.DisplaySafeAreaPadding; } + getColorsAt(index) { return this.Colors[index]; } + setColorsAt(index, color) { this.Colors[index].Copy(color); return true; } + ScaleAllSizes(scale_factor) { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} +class ImGuiStyle { + constructor(internal = new script_ImGuiStyle()) { + this.internal = internal; + this.Colors = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 43 /* COUNT */; + } + return this.internal.getColorsAt(Number(key)); + }, + set: (target, key, value) => { + return this.internal.setColorsAt(Number(key), value); + } + }); + } + get Alpha() { return this.internal.Alpha; } + set Alpha(value) { this.internal.Alpha = value; } + get WindowPadding() { return this.internal.getWindowPadding(); } + get WindowRounding() { return this.internal.WindowRounding; } + set WindowRounding(value) { this.internal.WindowRounding = value; } + get WindowBorderSize() { return this.internal.WindowBorderSize; } + set WindowBorderSize(value) { this.internal.WindowBorderSize = value; } + get WindowMinSize() { return this.internal.getWindowMinSize(); } + get WindowTitleAlign() { return this.internal.getWindowTitleAlign(); } + get ChildRounding() { return this.internal.ChildRounding; } + set ChildRounding(value) { this.internal.ChildRounding = value; } + get ChildBorderSize() { return this.internal.ChildBorderSize; } + set ChildBorderSize(value) { this.internal.ChildBorderSize = value; } + get PopupRounding() { return this.internal.PopupRounding; } + set PopupRounding(value) { this.internal.PopupRounding = value; } + get PopupBorderSize() { return this.internal.PopupBorderSize; } + set PopupBorderSize(value) { this.internal.PopupBorderSize = value; } + get FramePadding() { return this.internal.getFramePadding(); } + get FrameRounding() { return this.internal.FrameRounding; } + set FrameRounding(value) { this.internal.FrameRounding = value; } + get FrameBorderSize() { return this.internal.FrameBorderSize; } + set FrameBorderSize(value) { this.internal.FrameBorderSize = value; } + get ItemSpacing() { return this.internal.getItemSpacing(); } + get ItemInnerSpacing() { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding() { return this.internal.getTouchExtraPadding(); } + get IndentSpacing() { return this.internal.IndentSpacing; } + set IndentSpacing(value) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing() { return this.internal.ColumnsMinSpacing; } + set ColumnsMinSpacing(value) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize() { return this.internal.ScrollbarSize; } + set ScrollbarSize(value) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding() { return this.internal.ScrollbarRounding; } + set ScrollbarRounding(value) { this.internal.ScrollbarRounding = value; } + get GrabMinSize() { return this.internal.GrabMinSize; } + set GrabMinSize(value) { this.internal.GrabMinSize = value; } + get GrabRounding() { return this.internal.GrabRounding; } + set GrabRounding(value) { this.internal.GrabRounding = value; } + get ButtonTextAlign() { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding() { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding() { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines() { return this.internal.AntiAliasedLines; } + set AntiAliasedLines(value) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill() { return this.internal.AntiAliasedFill; } + set AntiAliasedFill(value) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol() { return this.internal.CurveTessellationTol; } + set CurveTessellationTol(value) { this.internal.CurveTessellationTol = value; } + Copy(other) { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < 43 /* COUNT */; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + ScaleAllSizes(scale_factor) { this.internal.ScaleAllSizes(scale_factor); } +} +exports.ImGuiStyle = ImGuiStyle; +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +class ImGuiIO { + constructor(native) { + this.native = native; + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + this.KeyMap = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 19 /* COUNT */; + } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + this.MouseDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + this.KeysDown = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target, key, value) => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + this.MouseDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 5; + } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + this.KeysDownDuration = new Proxy([], { + get: (target, key) => { + if (key === "length") { + return 512; + } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + } + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize() { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime() { return this.native.DeltaTime; } + set DeltaTime(value) { this.native.DeltaTime = value; } + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts() { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale() { return this.native.FontGlobalScale; } + set FontGlobalScale(value) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling() { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale() { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn() { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value) { ImGuiIO.RenderDrawListsFn = value; } + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos() { return this.native.getMousePos(); } + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + get MouseWheel() { return this.native.MouseWheel; } + set MouseWheel(value) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor() { return this.native.MouseDrawCursor; } + set MouseDrawCursor(value) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl() { return this.native.KeyCtrl; } + set KeyCtrl(value) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift() { return this.native.KeyShift; } + set KeyShift(value) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt() { return this.native.KeyAlt; } + set KeyAlt(value) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper() { return this.native.KeySuper; } + set KeySuper(value) { this.native.KeySuper = value; } + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + AddInputCharacter(c) { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse() { return this.native.WantCaptureMouse; } + set WantCaptureMouse(value) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard() { return this.native.WantCaptureKeyboard; } + set WantCaptureKeyboard(value) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput() { return this.native.WantTextInput; } + set WantTextInput(value) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse() { return this.native.WantMoveMouse; } + set WantMoveMouse(value) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate() { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta() { return this.native.getMouseDelta(); } +} +exports.ImGuiIO = ImGuiIO; +// Main +// IMGUI_API ImGuiIO& GetIO(); +function GetIO() { return new ImGuiIO(bind.GetIO()); } +exports.GetIO = GetIO; +// IMGUI_API ImGuiStyle& GetStyle(); +function GetStyle() { return new ImGuiStyle(bind.GetStyle()); } +exports.GetStyle = GetStyle; +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +function GetDrawData() { + const draw_data = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +exports.GetDrawData = GetDrawData; +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +function NewFrame() { bind.NewFrame(); } +exports.NewFrame = NewFrame; +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +function Render() { + bind.Render(); + const io = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +exports.Render = Render; +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +function EndFrame() { bind.EndFrame(); } +exports.EndFrame = EndFrame; +// IMGUI_API void Shutdown(); +function Shutdown() { bind.Shutdown(); } +exports.Shutdown = Shutdown; +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +function ShowDemoWindow(p_open = null) { bind.ShowDemoWindow(p_open); } +exports.ShowDemoWindow = ShowDemoWindow; +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +function ShowMetricsWindow(p_open = null) { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } + else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } + else { + const ref_open = [p_open()]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +exports.ShowMetricsWindow = ShowMetricsWindow; +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +function ShowStyleEditor(ref = null) { + if (ref === null) { + bind.ShowStyleEditor(null); + } + else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +exports.ShowStyleEditor = ShowStyleEditor; +// IMGUI_API bool ShowStyleSelector(const char* label); +function ShowStyleSelector(label) { return bind.ShowStyleSelector(label); } +exports.ShowStyleSelector = ShowStyleSelector; +// IMGUI_API void ShowFontSelector(const char* label); +function ShowFontSelector(label) { bind.ShowFontSelector(label); } +exports.ShowFontSelector = ShowFontSelector; +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +function ShowUserGuide() { bind.ShowUserGuide(); } +exports.ShowUserGuide = ShowUserGuide; +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +function Begin(name, open = null, flags = 0) { + if (open === null) { + return bind.Begin(name, null, flags); + } + else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } + else { + const ref_open = [open()]; + const opened = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +exports.Begin = Begin; +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +var bind_imgui_9 = require("./bind-imgui"); +exports.End = bind_imgui_9.End; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +function BeginChild(id, size = ImVec2.ZERO, border = false, extra_flags = 0) { + return bind.BeginChild(id, size, border, extra_flags); +} +exports.BeginChild = BeginChild; +// IMGUI_API void EndChild(); +function EndChild() { + bind.EndChild(); +} +exports.EndChild = EndChild; +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +function GetContentRegionMax(out = new ImVec2()) { + return bind.GetContentRegionMax(out); +} +exports.GetContentRegionMax = GetContentRegionMax; +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +function GetContentRegionAvail(out = new ImVec2()) { + return bind.GetContentRegionAvail(out); +} +exports.GetContentRegionAvail = GetContentRegionAvail; +// IMGUI_API float GetContentRegionAvailWidth(); // +var bind_imgui_10 = require("./bind-imgui"); +exports.GetContentRegionAvailWidth = bind_imgui_10.GetContentRegionAvailWidth; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +function GetWindowContentRegionMin(out = new ImVec2()) { + return bind.GetWindowContentRegionMin(out); +} +exports.GetWindowContentRegionMin = GetWindowContentRegionMin; +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +function GetWindowContentRegionMax(out = new ImVec2()) { + return bind.GetWindowContentRegionMax(out); +} +exports.GetWindowContentRegionMax = GetWindowContentRegionMax; +// IMGUI_API float GetWindowContentRegionWidth(); // +var bind_imgui_11 = require("./bind-imgui"); +exports.GetWindowContentRegionWidth = bind_imgui_11.GetWindowContentRegionWidth; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +function GetWindowDrawList() { + return new ImDrawList(bind.GetWindowDrawList()); +} +exports.GetWindowDrawList = GetWindowDrawList; +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +function GetWindowPos(out = new ImVec2()) { + return bind.GetWindowPos(out); +} +exports.GetWindowPos = GetWindowPos; +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +function GetWindowSize(out = new ImVec2()) { + return bind.GetWindowSize(out); +} +exports.GetWindowSize = GetWindowSize; +// IMGUI_API float GetWindowWidth(); +var bind_imgui_12 = require("./bind-imgui"); +exports.GetWindowWidth = bind_imgui_12.GetWindowWidth; +// IMGUI_API float GetWindowHeight(); +var bind_imgui_13 = require("./bind-imgui"); +exports.GetWindowHeight = bind_imgui_13.GetWindowHeight; +// IMGUI_API bool IsWindowCollapsed(); +var bind_imgui_14 = require("./bind-imgui"); +exports.IsWindowCollapsed = bind_imgui_14.IsWindowCollapsed; +// IMGUI_API bool IsWindowAppearing(); +var bind_imgui_15 = require("./bind-imgui"); +exports.IsWindowAppearing = bind_imgui_15.IsWindowAppearing; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +var bind_imgui_16 = require("./bind-imgui"); +exports.SetWindowFontScale = bind_imgui_16.SetWindowFontScale; +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +function SetNextWindowPos(pos, cond = 0, pivot = ImVec2.ZERO) { + bind.SetNextWindowPos(pos, cond, pivot); +} +exports.SetNextWindowPos = SetNextWindowPos; +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +function SetNextWindowSize(pos, cond = 0) { + bind.SetNextWindowSize(pos, cond); +} +exports.SetNextWindowSize = SetNextWindowSize; +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +function SetNextWindowSizeConstraints(size_min, size_max, custom_callback = null, custom_callback_data = null) { + if (custom_callback) { + function _custom_callback(data) { + const _data = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } + else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +exports.SetNextWindowSizeConstraints = SetNextWindowSizeConstraints; +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +function SetNextWindowContentSize(size) { + bind.SetNextWindowContentSize(size); +} +exports.SetNextWindowContentSize = SetNextWindowContentSize; +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +function SetNextWindowCollapsed(collapsed, cond = 0) { + bind.SetNextWindowCollapsed(collapsed, cond); +} +exports.SetNextWindowCollapsed = SetNextWindowCollapsed; +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +var bind_imgui_17 = require("./bind-imgui"); +exports.SetNextWindowFocus = bind_imgui_17.SetNextWindowFocus; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +function SetWindowPos(name_or_pos, pos_or_cond = 0, cond = 0) { + if (typeof (name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond, cond); + return; + } + else { + bind.SetWindowPos(name_or_pos, pos_or_cond); + } +} +exports.SetWindowPos = SetWindowPos; +function SetWindowSize(name_or_size, size_or_cond = 0, cond = 0) { + if (typeof (name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond, cond); + } + else { + bind.SetWindowSize(name_or_size, size_or_cond); + } +} +exports.SetWindowSize = SetWindowSize; +function SetWindowCollapsed(name_or_collapsed, collapsed_or_cond = 0, cond = 0) { + if (typeof (name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond, cond); + } + else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond); + } +} +exports.SetWindowCollapsed = SetWindowCollapsed; +function SetWindowFocus(name) { + if (typeof (name) === "string") { + bind.SetWindowNameFocus(name); + } + else { + bind.SetWindowFocus(); + } +} +exports.SetWindowFocus = SetWindowFocus; +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +var bind_imgui_18 = require("./bind-imgui"); +exports.GetScrollX = bind_imgui_18.GetScrollX; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +var bind_imgui_19 = require("./bind-imgui"); +exports.GetScrollY = bind_imgui_19.GetScrollY; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +var bind_imgui_20 = require("./bind-imgui"); +exports.GetScrollMaxX = bind_imgui_20.GetScrollMaxX; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +var bind_imgui_21 = require("./bind-imgui"); +exports.GetScrollMaxY = bind_imgui_21.GetScrollMaxY; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +var bind_imgui_22 = require("./bind-imgui"); +exports.SetScrollX = bind_imgui_22.SetScrollX; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +var bind_imgui_23 = require("./bind-imgui"); +exports.SetScrollY = bind_imgui_23.SetScrollY; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +function SetScrollHere(center_y_ratio = 0.5) { + bind.SetScrollHere(center_y_ratio); +} +exports.SetScrollHere = SetScrollHere; +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +function SetScrollFromPosY(pos_y, center_y_ratio = 0.5) { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +exports.SetScrollFromPosY = SetScrollFromPosY; +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +function PushFont(font) { } +exports.PushFont = PushFont; +// IMGUI_API void PopFont(); +function PopFont() { } +exports.PopFont = PopFont; +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +function PushStyleColor(idx, col) { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } + else { + bind.PushStyleColor(idx, col); + } +} +exports.PushStyleColor = PushStyleColor; +// IMGUI_API void PopStyleColor(int count = 1); +function PopStyleColor(count = 1) { + bind.PopStyleColor(count); +} +exports.PopStyleColor = PopStyleColor; +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +function PushStyleVar(idx, val) { + bind.PushStyleVar(idx, val); +} +exports.PushStyleVar = PushStyleVar; +// IMGUI_API void PopStyleVar(int count = 1); +function PopStyleVar(count = 1) { + bind.PopStyleVar(count); +} +exports.PopStyleVar = PopStyleVar; +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +function GetStyleColorVec4(idx) { + return bind.GetStyleColorVec4(idx); +} +exports.GetStyleColorVec4 = GetStyleColorVec4; +// IMGUI_API ImFont* GetFont(); // get current font +function GetFont() { + return new ImFont(bind.GetFont()); +} +exports.GetFont = GetFont; +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +var bind_imgui_24 = require("./bind-imgui"); +exports.GetFontSize = bind_imgui_24.GetFontSize; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +function GetFontTexUvWhitePixel(out = new ImVec2()) { + return bind.GetFontTexUvWhitePixel(out); +} +exports.GetFontTexUvWhitePixel = GetFontTexUvWhitePixel; +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +function GetColorU32(idx, alpha_mul = 1.0) { + return bind.GetColorU32(idx, alpha_mul); +} +exports.GetColorU32 = GetColorU32; +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +var bind_imgui_25 = require("./bind-imgui"); +exports.PushItemWidth = bind_imgui_25.PushItemWidth; +// IMGUI_API void PopItemWidth(); +var bind_imgui_26 = require("./bind-imgui"); +exports.PopItemWidth = bind_imgui_26.PopItemWidth; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +var bind_imgui_27 = require("./bind-imgui"); +exports.CalcItemWidth = bind_imgui_27.CalcItemWidth; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +function PushTextWrapPos(wrap_pos_x = 0.0) { + bind.PushTextWrapPos(wrap_pos_x); +} +exports.PushTextWrapPos = PushTextWrapPos; +// IMGUI_API void PopTextWrapPos(); +var bind_imgui_28 = require("./bind-imgui"); +exports.PopTextWrapPos = bind_imgui_28.PopTextWrapPos; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +var bind_imgui_29 = require("./bind-imgui"); +exports.PushAllowKeyboardFocus = bind_imgui_29.PushAllowKeyboardFocus; +// IMGUI_API void PopAllowKeyboardFocus(); +var bind_imgui_30 = require("./bind-imgui"); +exports.PopAllowKeyboardFocus = bind_imgui_30.PopAllowKeyboardFocus; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +var bind_imgui_31 = require("./bind-imgui"); +exports.PushButtonRepeat = bind_imgui_31.PushButtonRepeat; +// IMGUI_API void PopButtonRepeat(); +var bind_imgui_32 = require("./bind-imgui"); +exports.PopButtonRepeat = bind_imgui_32.PopButtonRepeat; +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +var bind_imgui_33 = require("./bind-imgui"); +exports.Separator = bind_imgui_33.Separator; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +function SameLine(pos_x = 0.0, spacing_w = -1.0) { + bind.SameLine(pos_x, spacing_w); +} +exports.SameLine = SameLine; +// IMGUI_API void NewLine(); // undo a SameLine() +var bind_imgui_34 = require("./bind-imgui"); +exports.NewLine = bind_imgui_34.NewLine; +// IMGUI_API void Spacing(); // add vertical spacing +var bind_imgui_35 = require("./bind-imgui"); +exports.Spacing = bind_imgui_35.Spacing; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +function Dummy(size) { bind.Dummy(size); } +exports.Dummy = Dummy; +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +function Indent(indent_w = 0.0) { bind.Indent(indent_w); } +exports.Indent = Indent; +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +function Unindent(indent_w = 0.0) { bind.Unindent(indent_w); } +exports.Unindent = Unindent; +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +var bind_imgui_36 = require("./bind-imgui"); +exports.BeginGroup = bind_imgui_36.BeginGroup; +// IMGUI_API void EndGroup(); +var bind_imgui_37 = require("./bind-imgui"); +exports.EndGroup = bind_imgui_37.EndGroup; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +function GetCursorPos(out = new ImVec2()) { return bind.GetCursorPos(out); } +exports.GetCursorPos = GetCursorPos; +// IMGUI_API float GetCursorPosX(); // " +var bind_imgui_38 = require("./bind-imgui"); +exports.GetCursorPosX = bind_imgui_38.GetCursorPosX; +// IMGUI_API float GetCursorPosY(); // " +var bind_imgui_39 = require("./bind-imgui"); +exports.GetCursorPosY = bind_imgui_39.GetCursorPosY; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +function SetCursorPos(local_pos) { bind.SetCursorPos(local_pos); } +exports.SetCursorPos = SetCursorPos; +// IMGUI_API void SetCursorPosX(float x); // " +var bind_imgui_40 = require("./bind-imgui"); +exports.SetCursorPosX = bind_imgui_40.SetCursorPosX; +// IMGUI_API void SetCursorPosY(float y); // " +var bind_imgui_41 = require("./bind-imgui"); +exports.SetCursorPosY = bind_imgui_41.SetCursorPosY; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +function GetCursorStartPos(out = new ImVec2()) { return bind.GetCursorStartPos(out); } +exports.GetCursorStartPos = GetCursorStartPos; +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +function GetCursorScreenPos(out = new ImVec2()) { return bind.GetCursorScreenPos(out); } +exports.GetCursorScreenPos = GetCursorScreenPos; +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +function SetCursorScreenPos(pos) { bind.SetCursorScreenPos(pos); } +exports.SetCursorScreenPos = SetCursorScreenPos; +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +var bind_imgui_42 = require("./bind-imgui"); +exports.AlignTextToFramePadding = bind_imgui_42.AlignTextToFramePadding; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +var bind_imgui_43 = require("./bind-imgui"); +exports.GetTextLineHeight = bind_imgui_43.GetTextLineHeight; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +var bind_imgui_44 = require("./bind-imgui"); +exports.GetTextLineHeightWithSpacing = bind_imgui_44.GetTextLineHeightWithSpacing; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +var bind_imgui_45 = require("./bind-imgui"); +exports.GetFrameHeight = bind_imgui_45.GetFrameHeight; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +var bind_imgui_46 = require("./bind-imgui"); +exports.GetFrameHeightWithSpacing = bind_imgui_46.GetFrameHeightWithSpacing; +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +function Columns(count = 1, id = null, border = true) { + id = id || ""; + bind.Columns(count, id, border); +} +exports.Columns = Columns; +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +var bind_imgui_47 = require("./bind-imgui"); +exports.NextColumn = bind_imgui_47.NextColumn; +// IMGUI_API int GetColumnIndex(); // get current column index +var bind_imgui_48 = require("./bind-imgui"); +exports.GetColumnIndex = bind_imgui_48.GetColumnIndex; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +function GetColumnWidth(column_index = -1) { + return bind.GetColumnWidth(column_index); +} +exports.GetColumnWidth = GetColumnWidth; +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +var bind_imgui_49 = require("./bind-imgui"); +exports.SetColumnWidth = bind_imgui_49.SetColumnWidth; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +function GetColumnOffset(column_index = -1) { + return bind.GetColumnOffset(column_index); +} +exports.GetColumnOffset = GetColumnOffset; +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +var bind_imgui_50 = require("./bind-imgui"); +exports.SetColumnOffset = bind_imgui_50.SetColumnOffset; +// IMGUI_API int GetColumnsCount(); +var bind_imgui_51 = require("./bind-imgui"); +exports.GetColumnsCount = bind_imgui_51.GetColumnsCount; +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +var bind_imgui_52 = require("./bind-imgui"); +exports.PushID = bind_imgui_52.PushID; +// IMGUI_API void PopID(); +var bind_imgui_53 = require("./bind-imgui"); +exports.PopID = bind_imgui_53.PopID; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +var bind_imgui_54 = require("./bind-imgui"); +exports.GetID = bind_imgui_54.GetID; +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +function TextUnformatted(text) { bind.TextUnformatted(text); } +exports.TextUnformatted = TextUnformatted; +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +function Text(fmt /*, ...args: any[]*/) { bind.Text(fmt /*, ...args*/); } +exports.Text = Text; +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +function TextColored(col, fmt /*, ...args: any[]*/) { + bind.TextColored((col instanceof ImColor) ? col.Value : col, fmt /*, ...args*/); +} +exports.TextColored = TextColored; +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextDisabled(fmt /*, ...args: any[]*/) { bind.TextDisabled(fmt /*, ...args*/); } +exports.TextDisabled = TextDisabled; +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +function TextWrapped(fmt /*, ...args: any[]*/) { bind.TextWrapped(fmt /*, ...args*/); } +exports.TextWrapped = TextWrapped; +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +function LabelText(label, fmt /*, ...args: any[]*/) { bind.LabelText(label, fmt /*, ...args*/); } +exports.LabelText = LabelText; +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +function BulletText(fmt /*, ...args: any[]*/) { bind.BulletText(fmt /*, ...args*/); } +exports.BulletText = BulletText; +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +var bind_imgui_55 = require("./bind-imgui"); +exports.Bullet = bind_imgui_55.Bullet; +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +function Button(label, size = ImVec2.ZERO) { + return bind.Button(label, size); +} +exports.Button = Button; +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +var bind_imgui_56 = require("./bind-imgui"); +exports.SmallButton = bind_imgui_56.SmallButton; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +function InvisibleButton(str_id, size) { + return bind.InvisibleButton(str_id, size); +} +exports.InvisibleButton = InvisibleButton; +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +function Image(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, tint_col = ImVec4.WHITE, border_col = ImVec4.ZERO) { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +exports.Image = Image; +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +function ImageButton(user_texture_id, size, uv0 = ImVec2.ZERO, uv1 = ImVec2.UNIT, frame_padding = -1, bg_col = ImVec4.ZERO, tint_col = ImVec4.WHITE) { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +exports.ImageButton = ImageButton; +// IMGUI_API bool Checkbox(const char* label, bool* v); +function Checkbox(label, v) { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } + else { + const ref_v = [v()]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +exports.Checkbox = Checkbox; +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +function CheckboxFlags(label, flags, flags_value) { + return bind.CheckboxFlags(label, flags, flags_value); +} +exports.CheckboxFlags = CheckboxFlags; +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +function RadioButton(label, active_or_v, v_button) { + if (typeof (active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } + else { + const ref_v = [active_or_v()]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +exports.RadioButton = RadioButton; +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotLines_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Array = PlotLines_Array; +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotLines_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines_Callback = PlotLines_Callback; +function PlotLines(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotLines = PlotLines; +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +function PlotHistogram_Array(label, values, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO, stride = 1) { + function values_getter(data, idx) { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Array = PlotHistogram_Array; +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +function PlotHistogram_Callback(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram_Callback = PlotHistogram_Callback; +function PlotHistogram(label, values_getter, data, values_count = 0, value_offset = 0, overlay_text = null, scale_min = null, scale_max = null, graph_size = ImVec2.ZERO) { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +exports.PlotHistogram = PlotHistogram; +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +function ProgressBar(fraction, size_arg = new ImVec2(-1, 0), overlay = null) { + bind.ProgressBar(fraction, size_arg, overlay); +} +exports.ProgressBar = ProgressBar; +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +function BeginCombo(label, preview_value, flags = 0) { + return bind.BeginCombo(label, preview_value, flags); +} +exports.BeginCombo = BeginCombo; +// IMGUI_API void EndCombo(); +function EndCombo() { bind.EndCombo(); } +exports.EndCombo = EndCombo; +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count) { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2); +} +function Combo(label, current_item, items, items_count = items.length, popup_max_height_in_items = -1) { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + const _current_item = Array.isArray(current_item) ? current_item : [current_item()]; + if (typeof (items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + // const char* preview_text = NULL; + let preview_text = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) { + const popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed = false; + for (let i = 0; i < items_count; i++) { + bind.PushID(i.toString()); + const item_selected = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + EndCombo(); + if (!Array.isArray(current_item)) { + current_item(_current_item[0]); + } + return value_changed; +} +exports.Combo = Combo; +function Combo_2(label, current_item, items, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_2 = Combo_2; +function Combo_3(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1) { + return false; +} +exports.Combo_3 = Combo_3; +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +function DragFloat(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.DragFloat = DragFloat; +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat2(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec2) { + const _v = [v.x, v.y]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } + else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat2 = DragFloat2; +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat3(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +exports.DragFloat3 = DragFloat3; +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +function DragFloat4(label, v, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", power = 1.0) { + if (v instanceof ImVec4) { + const _v = [v.x, v.y, v.z, v.w]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } + else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +exports.DragFloat4 = DragFloat4; +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +function DragFloatRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0.0, v_max = 0.0, display_format = "%.3f", display_format_max = null, power = 1.0) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragFloatRange2 = DragFloatRange2; +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +function DragInt(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.DragInt = DragInt; +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt2(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt2 = DragInt2; +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt3(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt3 = DragInt3; +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +function DragInt4(label, v, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f") { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +exports.DragInt4 = DragInt4; +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +function DragIntRange2(label, v_current_min, v_current_max, v_speed = 1.0, v_min = 0, v_max = 0, display_format = "%.0f", display_format_max = null) { + const ref_v_current_min = Array.isArray(v_current_min) ? v_current_min : [v_current_min()]; + const ref_v_current_max = Array.isArray(v_current_max) ? v_current_max : [v_current_max()]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { + v_current_min(ref_v_current_min[0]); + } + if (!Array.isArray(v_current_max)) { + v_current_max(ref_v_current_max[0]); + } + return ret; +} +exports.DragIntRange2 = DragIntRange2; +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputText(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputText = InputText; +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +function InputTextMultiline(label, buf, buf_size = buf instanceof ImStringBuffer ? buf.size : exports.ImGuiTextEditDefaultSize, size = ImVec2.ZERO, flags = 0, callback = null, user_data = null) { + function _callback(data) { + const _data = new ImGuiTextEditCallbackData(data); + const ret = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } + else if (buf instanceof ImStringBuffer) { + const ref_buf = [buf.buffer]; + const _buf_size = Math.min(buf_size, buf.size); + let ret = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } + else { + const ref_buf = [buf()]; + let ret = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +exports.InputTextMultiline = InputTextMultiline; +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat(label, v, step = 0.0, step_fast = 0.0, decimal_precision = -1, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputFloat = InputFloat; +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat2(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +exports.InputFloat2 = InputFloat2; +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat3(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +exports.InputFloat3 = InputFloat3; +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +function InputFloat4(label, v, decimal_precision = -1, extra_flags = 0) { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +exports.InputFloat4 = InputFloat4; +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +function InputInt(label, v, step = 1, step_fast = 100, extra_flags = 0) { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } + else { + const ref_v = [v()]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +exports.InputInt = InputInt; +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +function InputInt2(label, v, extra_flags = 0) { + return bind.InputInt2(label, v, extra_flags); +} +exports.InputInt2 = InputInt2; +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +function InputInt3(label, v, extra_flags = 0) { + return bind.InputInt3(label, v, extra_flags); +} +exports.InputInt3 = InputInt3; +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +function InputInt4(label, v, extra_flags = 0) { + return bind.InputInt4(label, v, extra_flags); +} +exports.InputInt4 = InputInt4; +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +function SliderFloat(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.SliderFloat = SliderFloat; +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat2(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } + else { + const _v = [v.x, v.y]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +exports.SliderFloat2 = SliderFloat2; +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat3(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat3 = SliderFloat3; +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function SliderFloat4(label, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +exports.SliderFloat4 = SliderFloat4; +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +function SliderAngle(label, v_rad, v_degrees_min = -360.0, v_degrees_max = +360.0) { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } + else { + const ref_v_rad = [v_rad()]; + const ret = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +exports.SliderAngle = SliderAngle; +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt(label, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.SliderInt = SliderInt; +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt2(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +exports.SliderInt2 = SliderInt2; +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt3(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +exports.SliderInt3 = SliderInt3; +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +function SliderInt4(label, v, v_min, v_max, display_format = "%.0f") { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +exports.SliderInt4 = SliderInt4; +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +function VSliderFloat(label, size, v, v_min, v_max, display_format = "%.3f", power = 1.0) { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +exports.VSliderFloat = VSliderFloat; +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +function VSliderInt(label, size, v, v_min, v_max, display_format = "%.0f") { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } + else { + const ref_v = [v()]; + const ret = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +exports.VSliderInt = VSliderInt; +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorEdit3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorEdit3 = ColorEdit3; +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +function ColorEdit4(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorEdit4 = ColorEdit4; +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +function ColorPicker3(label, col, flags = 0) { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } + else { + const _col = [col.x, col.y, col.z]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + return ret; + } +} +exports.ColorPicker3 = ColorPicker3; +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +function ColorPicker4(label, col, flags = 0, ref_col = null) { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } + else { + const _col = [col.x, col.y, col.z, col.w]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; + col.y = _col[1]; + col.z = _col[2]; + col.w = _col[3]; + return ret; + } +} +exports.ColorPicker4 = ColorPicker4; +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +function ColorButton(desc_id, col, flags = 0, size = ImVec2.ZERO) { + return bind.ColorButton(desc_id, col, flags, size); +} +exports.ColorButton = ColorButton; +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +function SetColorEditOptions(flags) { + bind.SetColorEditOptions(flags); +} +exports.SetColorEditOptions = SetColorEditOptions; +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +function TreeNode(label_or_id, fmt) { + return bind.TreeNode(label_or_id, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNode = TreeNode; +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +function TreeNodeEx(label_or_id, flags = 0, fmt) { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof (label_or_id) === "string") ? label_or_id : "")); +} +exports.TreeNodeEx = TreeNodeEx; +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +var bind_imgui_57 = require("./bind-imgui"); +exports.TreePush = bind_imgui_57.TreePush; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +var bind_imgui_58 = require("./bind-imgui"); +exports.TreePop = bind_imgui_58.TreePop; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +var bind_imgui_59 = require("./bind-imgui"); +exports.TreeAdvanceToLabelPos = bind_imgui_59.TreeAdvanceToLabelPos; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +var bind_imgui_60 = require("./bind-imgui"); +exports.GetTreeNodeToLabelSpacing = bind_imgui_60.GetTreeNodeToLabelSpacing; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +function SetNextTreeNodeOpen(is_open, cond = 0) { + bind.SetNextTreeNodeOpen(is_open, cond); +} +exports.SetNextTreeNodeOpen = SetNextTreeNodeOpen; +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +function CollapsingHeader(label, flags_or_p_open = 0, flags = 0) { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } + else if (typeof (flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } + else { + const ref_open = [flags_or_p_open()]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} +exports.CollapsingHeader = CollapsingHeader; +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +function Selectable(label, selected = false, flags = 0, size = ImVec2.ZERO) { + if (typeof (selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } + else { + const ref_selected = [selected()]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +exports.Selectable = Selectable; +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +function ListBox(label, current_item, items, items_count = items.length, height_in_items = -1) { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } + else { + const ref_current_item = [current_item()]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +exports.ListBox = ListBox; +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +function ListBoxHeader(label, size) { + return bind.ListBoxHeader(label, size); +} +exports.ListBoxHeader = ListBoxHeader; +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +function ListBoxFooter() { + bind.ListBoxFooter(); +} +exports.ListBoxFooter = ListBoxFooter; +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +function Value(prefix, ...args) { +} +exports.Value = Value; +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +function SetTooltip(fmt) { + bind.SetTooltip(fmt); +} +exports.SetTooltip = SetTooltip; +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +var bind_imgui_61 = require("./bind-imgui"); +exports.BeginTooltip = bind_imgui_61.BeginTooltip; +// IMGUI_API void EndTooltip(); +var bind_imgui_62 = require("./bind-imgui"); +exports.EndTooltip = bind_imgui_62.EndTooltip; +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +var bind_imgui_63 = require("./bind-imgui"); +exports.BeginMainMenuBar = bind_imgui_63.BeginMainMenuBar; +// IMGUI_API void EndMainMenuBar(); +var bind_imgui_64 = require("./bind-imgui"); +exports.EndMainMenuBar = bind_imgui_64.EndMainMenuBar; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +var bind_imgui_65 = require("./bind-imgui"); +exports.BeginMenuBar = bind_imgui_65.BeginMenuBar; +// IMGUI_API void EndMenuBar(); +var bind_imgui_66 = require("./bind-imgui"); +exports.EndMenuBar = bind_imgui_66.EndMenuBar; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +function BeginMenu(label, enabled = true) { return bind.BeginMenu(label, enabled); } +exports.BeginMenu = BeginMenu; +// IMGUI_API void EndMenu(); +var bind_imgui_67 = require("./bind-imgui"); +exports.EndMenu = bind_imgui_67.EndMenu; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +function MenuItem(label, shortcut = null, selected = false, enabled = true) { + if (shortcut === null) { + shortcut = ""; + } + if (typeof (selected) === "boolean") { + selected = [selected]; + return bind.MenuItem(label, shortcut, selected, enabled); + } + else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } + else { + const ref_selected = [selected()]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} +exports.MenuItem = MenuItem; +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +var bind_imgui_68 = require("./bind-imgui"); +exports.OpenPopup = bind_imgui_68.OpenPopup; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +function OpenPopupOnItemClick(str_id = "", mouse_button = 1) { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +exports.OpenPopupOnItemClick = OpenPopupOnItemClick; +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +var bind_imgui_69 = require("./bind-imgui"); +exports.BeginPopup = bind_imgui_69.BeginPopup; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +function BeginPopupModal(str_id = "", p_open = null, extra_flags = 0) { + p_open = p_open || [true]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +exports.BeginPopupModal = BeginPopupModal; +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +function BeginPopupContextItem(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +exports.BeginPopupContextItem = BeginPopupContextItem; +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +function BeginPopupContextWindow(str_id = "", mouse_button = 1, also_over_items = true) { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +exports.BeginPopupContextWindow = BeginPopupContextWindow; +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +function BeginPopupContextVoid(str_id = "", mouse_button = 1) { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +exports.BeginPopupContextVoid = BeginPopupContextVoid; +// IMGUI_API void EndPopup(); +var bind_imgui_70 = require("./bind-imgui"); +exports.EndPopup = bind_imgui_70.EndPopup; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +var bind_imgui_71 = require("./bind-imgui"); +exports.IsPopupOpen = bind_imgui_71.IsPopupOpen; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +var bind_imgui_72 = require("./bind-imgui"); +exports.CloseCurrentPopup = bind_imgui_72.CloseCurrentPopup; +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +function LogToTTY(max_depth = -1) { + bind.LogToTTY(max_depth); +} +exports.LogToTTY = LogToTTY; +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +function LogToFile(max_depth = -1, filename = null) { + bind.LogToFile(max_depth, filename); +} +exports.LogToFile = LogToFile; +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +function LogToClipboard(max_depth = -1) { + bind.LogToClipboard(max_depth); +} +exports.LogToClipboard = LogToClipboard; +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +var bind_imgui_73 = require("./bind-imgui"); +exports.LogFinish = bind_imgui_73.LogFinish; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +var bind_imgui_74 = require("./bind-imgui"); +exports.LogButtons = bind_imgui_74.LogButtons; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +function LogText(fmt) { + bind.LogText(fmt); +} +exports.LogText = LogText; +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +function BeginDragDropSource(flags = 0, mouse_button = 0) { + return false; +} +exports.BeginDragDropSource = BeginDragDropSource; +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +function SetDragDropPayload(type, data, size, cond = 0) { + return false; +} +exports.SetDragDropPayload = SetDragDropPayload; +// IMGUI_API void EndDragDropSource(); +function EndDragDropSource() { +} +exports.EndDragDropSource = EndDragDropSource; +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +function BeginDragDropTarget() { + return false; +} +exports.BeginDragDropTarget = BeginDragDropTarget; +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +function AcceptDragDropPayload(type, flags = 0) { + return null; +} +exports.AcceptDragDropPayload = AcceptDragDropPayload; +// IMGUI_API void EndDragDropTarget(); +function EndDragDropTarget() { +} +exports.EndDragDropTarget = EndDragDropTarget; +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +function PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect) { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +exports.PushClipRect = PushClipRect; +// IMGUI_API void PopClipRect(); +function PopClipRect() { + bind.PopClipRect(); +} +exports.PopClipRect = PopClipRect; +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +function StyleColorsClassic(dst = null) { + if (dst === null) { + bind.StyleColorsClassic(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsClassic = StyleColorsClassic; +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +function StyleColorsDark(dst = null) { + if (dst === null) { + bind.StyleColorsDark(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsDark = StyleColorsDark; +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +function StyleColorsLight(dst = null) { + if (dst === null) { + bind.StyleColorsLight(null); + } + else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } + else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} +exports.StyleColorsLight = StyleColorsLight; +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +var bind_imgui_75 = require("./bind-imgui"); +exports.SetItemDefaultFocus = bind_imgui_75.SetItemDefaultFocus; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +function SetKeyboardFocusHere(offset = 0) { + bind.SetKeyboardFocusHere(offset); +} +exports.SetKeyboardFocusHere = SetKeyboardFocusHere; +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +function IsItemHovered(flags = 0) { + return bind.IsItemHovered(flags); +} +exports.IsItemHovered = IsItemHovered; +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +var bind_imgui_76 = require("./bind-imgui"); +exports.IsItemActive = bind_imgui_76.IsItemActive; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +function IsItemClicked(mouse_button = 0) { + return bind.IsItemClicked(mouse_button); +} +exports.IsItemClicked = IsItemClicked; +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +var bind_imgui_77 = require("./bind-imgui"); +exports.IsItemVisible = bind_imgui_77.IsItemVisible; +// IMGUI_API bool IsAnyItemHovered(); +var bind_imgui_78 = require("./bind-imgui"); +exports.IsAnyItemHovered = bind_imgui_78.IsAnyItemHovered; +// IMGUI_API bool IsAnyItemActive(); +var bind_imgui_79 = require("./bind-imgui"); +exports.IsAnyItemActive = bind_imgui_79.IsAnyItemActive; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +function GetItemRectMin(out = new ImVec2()) { + return bind.GetItemRectMin(out); +} +exports.GetItemRectMin = GetItemRectMin; +// IMGUI_API ImVec2 GetItemRectMax(); // " +function GetItemRectMax(out = new ImVec2()) { + return bind.GetItemRectMax(out); +} +exports.GetItemRectMax = GetItemRectMax; +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +function GetItemRectSize(out = new ImVec2()) { + return bind.GetItemRectSize(out); +} +exports.GetItemRectSize = GetItemRectSize; +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +var bind_imgui_80 = require("./bind-imgui"); +exports.SetItemAllowOverlap = bind_imgui_80.SetItemAllowOverlap; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +function IsWindowFocused(flags = 0) { + return bind.IsWindowFocused(flags); +} +exports.IsWindowFocused = IsWindowFocused; +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +function IsWindowHovered(flags = 0) { + return bind.IsWindowHovered(flags); +} +exports.IsWindowHovered = IsWindowHovered; +// IMGUI_API bool IsAnyWindowFocused(); +var bind_imgui_81 = require("./bind-imgui"); +exports.IsAnyWindowFocused = bind_imgui_81.IsAnyWindowFocused; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +var bind_imgui_82 = require("./bind-imgui"); +exports.IsAnyWindowHovered = bind_imgui_82.IsAnyWindowHovered; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +function IsRectVisible(size_or_rect_min, rect_max) { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +exports.IsRectVisible = IsRectVisible; +// IMGUI_API float GetTime(); +var bind_imgui_83 = require("./bind-imgui"); +exports.GetTime = bind_imgui_83.GetTime; +// IMGUI_API int GetFrameCount(); +var bind_imgui_84 = require("./bind-imgui"); +exports.GetFrameCount = bind_imgui_84.GetFrameCount; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +function GetOverlayDrawList() { + return new ImDrawList(bind.GetOverlayDrawList()); +} +exports.GetOverlayDrawList = GetOverlayDrawList; +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +function GetDrawListSharedData() { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +exports.GetDrawListSharedData = GetDrawListSharedData; +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +var bind_imgui_85 = require("./bind-imgui"); +exports.GetStyleColorName = bind_imgui_85.GetStyleColorName; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +function CalcItemRectClosestPoint(pos, on_edge = false, outward = +0.0, out = new ImVec2()) { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +exports.CalcItemRectClosestPoint = CalcItemRectClosestPoint; +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +function CalcTextSize(text, text_end = null, hide_text_after_double_hash = false, wrap_width = -1, out = new ImVec2()) { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +exports.CalcTextSize = CalcTextSize; +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +function CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end) { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} +exports.CalcListClipping = CalcListClipping; +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +function BeginChildFrame(id, size, extra_flags = 0) { + return bind.BeginChildFrame(id, size, extra_flags); +} +exports.BeginChildFrame = BeginChildFrame; +// IMGUI_API void EndChildFrame(); +var bind_imgui_86 = require("./bind-imgui"); +exports.EndChildFrame = bind_imgui_86.EndChildFrame; +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +function ColorConvertU32ToFloat4(in_, out = new ImVec4()) { + return bind.ColorConvertU32ToFloat4(in_, out); +} +exports.ColorConvertU32ToFloat4 = ColorConvertU32ToFloat4; +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +function ColorConvertFloat4ToU32(in_) { + return bind.ColorConvertFloat4ToU32(in_); +} +exports.ColorConvertFloat4ToU32 = ColorConvertFloat4ToU32; +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +var bind_imgui_87 = require("./bind-imgui"); +exports.ColorConvertRGBtoHSV = bind_imgui_87.ColorConvertRGBtoHSV; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +var bind_imgui_88 = require("./bind-imgui"); +exports.ColorConvertHSVtoRGB = bind_imgui_88.ColorConvertHSVtoRGB; +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +function GetKeyIndex(imgui_key) { + return bind.GetKeyIndex(imgui_key); +} +exports.GetKeyIndex = GetKeyIndex; +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +function IsKeyDown(user_key_index) { + return bind.IsKeyDown(user_key_index); +} +exports.IsKeyDown = IsKeyDown; +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +function IsKeyPressed(user_key_index, repeat = true) { + return bind.IsKeyPressed(user_key_index, repeat); +} +exports.IsKeyPressed = IsKeyPressed; +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +function IsKeyReleased(user_key_index) { + return bind.IsKeyReleased(user_key_index); +} +exports.IsKeyReleased = IsKeyReleased; +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +function GetKeyPressedAmount(user_key_index, repeat_delay, rate) { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +exports.GetKeyPressedAmount = GetKeyPressedAmount; +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +function IsMouseDown(button) { + return bind.IsMouseDown(button); +} +exports.IsMouseDown = IsMouseDown; +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +function IsMouseClicked(button, repeat = false) { + return bind.IsMouseClicked(button, repeat); +} +exports.IsMouseClicked = IsMouseClicked; +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +function IsMouseDoubleClicked(button) { + return bind.IsMouseDoubleClicked(button); +} +exports.IsMouseDoubleClicked = IsMouseDoubleClicked; +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +function IsMouseReleased(button) { + return bind.IsMouseReleased(button); +} +exports.IsMouseReleased = IsMouseReleased; +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function IsMouseDragging(button = 0, lock_threshold = -1.0) { + return bind.IsMouseDragging(button, lock_threshold); +} +exports.IsMouseDragging = IsMouseDragging; +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +function IsMouseHoveringRect(r_min, r_max, clip = true) { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +exports.IsMouseHoveringRect = IsMouseHoveringRect; +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +function IsMousePosValid(mouse_pos = null) { + return bind.IsMousePosValid(mouse_pos); +} +exports.IsMousePosValid = IsMousePosValid; +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +function GetMousePos(out = new ImVec2()) { + return bind.GetMousePos(out); +} +exports.GetMousePos = GetMousePos; +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +function GetMousePosOnOpeningCurrentPopup(out = new ImVec2()) { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +exports.GetMousePosOnOpeningCurrentPopup = GetMousePosOnOpeningCurrentPopup; +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +function GetMouseDragDelta(button = 0, lock_threshold = -1.0, out = new ImVec2()) { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +exports.GetMouseDragDelta = GetMouseDragDelta; +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +function ResetMouseDragDelta(button = 0) { + bind.ResetMouseDragDelta(button); +} +exports.ResetMouseDragDelta = ResetMouseDragDelta; +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +var bind_imgui_89 = require("./bind-imgui"); +exports.GetMouseCursor = bind_imgui_89.GetMouseCursor; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +var bind_imgui_90 = require("./bind-imgui"); +exports.SetMouseCursor = bind_imgui_90.SetMouseCursor; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +function CaptureKeyboardFromApp(capture = true) { + return bind.CaptureKeyboardFromApp(capture); +} +exports.CaptureKeyboardFromApp = CaptureKeyboardFromApp; +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +function CaptureMouseFromApp(capture = true) { + bind.CaptureMouseFromApp(capture); +} +exports.CaptureMouseFromApp = CaptureMouseFromApp; +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +var bind_imgui_91 = require("./bind-imgui"); +exports.MemAlloc = bind_imgui_91.MemAlloc; +// IMGUI_API void MemFree(void* ptr); +var bind_imgui_92 = require("./bind-imgui"); +exports.MemFree = bind_imgui_92.MemFree; +// IMGUI_API const char* GetClipboardText(); +var bind_imgui_93 = require("./bind-imgui"); +exports.GetClipboardText = bind_imgui_93.GetClipboardText; +// IMGUI_API void SetClipboardText(const char* text); +var bind_imgui_94 = require("./bind-imgui"); +exports.SetClipboardText = bind_imgui_94.SetClipboardText; +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +var bind_imgui_95 = require("./bind-imgui"); +exports.GetVersion = bind_imgui_95.GetVersion; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +function CreateContext() { + return bind.CreateContext(); +} +exports.CreateContext = CreateContext; +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +function DestroyContext(ctx = null) { + return bind.DestroyContext(ctx); +} +exports.DestroyContext = DestroyContext; +// IMGUI_API ImGuiContext* GetCurrentContext(); +var bind_imgui_96 = require("./bind-imgui"); +exports.GetCurrentContext = bind_imgui_96.GetCurrentContext; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +var bind_imgui_97 = require("./bind-imgui"); +exports.SetCurrentContext = bind_imgui_97.SetCurrentContext; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWd1aS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFxQztBQUNyQyxxQ0FBcUM7QUFFckMsMkNBQTZDO0FBQXBDLHFDQUFBLGFBQWEsQ0FBQTtBQUV0QixtQkFBMEIsS0FBdUIsSUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7QUFBQyxDQUFDLENBQUMsQ0FBQztBQUEvRiw4QkFBK0Y7QUFFL0Ysc0JBQTZCLElBQXFDO0lBQzlELEVBQUUsQ0FBQyxDQUFDLElBQUksWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFBQyxJQUFJLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7QUFDTCxDQUFDO0FBTkQsb0NBTUM7QUFFRDtJQUNJLFlBQW1CLElBQVksRUFBUyxTQUFpQixFQUFFO1FBQXhDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFhO0lBQUcsQ0FBQztDQUNsRTtBQUZELHdDQUVDO0FBMEJELDJDQUFnRDtBQUF2Qyx3Q0FBQSxnQkFBZ0IsQ0FBQTtBQUV6QjtJQU1JLFlBQW1CLElBQVksR0FBRyxFQUFTLElBQVksR0FBRztRQUF2QyxNQUFDLEdBQUQsQ0FBQyxDQUFjO1FBQVMsTUFBQyxHQUFELENBQUMsQ0FBYztJQUFHLENBQUM7SUFFdkQsSUFBSSxDQUFDLEtBQXNDO1FBQzlDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksd0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxD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 \ No newline at end of file diff --git a/imgui.ts b/imgui.ts new file mode 100644 index 0000000..8661239 --- /dev/null +++ b/imgui.ts @@ -0,0 +1,2735 @@ +import * as bind from "./bind-imgui"; +import * as config from "./imconfig"; + +export { IMGUI_VERSION } from "./bind-imgui"; + +export function IM_ASSERT(_EXPR: boolean | number): void { if (!_EXPR) { throw new Error(); } } + +export function IM_ARRAYSIZE(_ARR: ArrayLike | ImStringBuffer): number { + if (_ARR instanceof ImStringBuffer) { + return _ARR.size; + } else { + return _ARR.length; + } +} + +export class ImStringBuffer { + constructor(public size: number, public buffer: string = "") {} +} + +export { ImAccess } from "./bind-imgui"; +export { ImScalar } from "./bind-imgui"; +export { ImTuple2 } from "./bind-imgui"; +export { ImTuple3 } from "./bind-imgui"; +export { ImTuple4 } from "./bind-imgui"; + +export { ImGuiWindowFlags, ImGuiWindowFlags as WindowFlags } from "./bind-imgui"; +export { ImGuiInputTextFlags, ImGuiInputTextFlags as InputTextFlags } from "./bind-imgui"; +export { ImGuiTreeNodeFlags, ImGuiTreeNodeFlags as TreeNodeFlags } from "./bind-imgui"; +export { ImGuiSelectableFlags, ImGuiSelectableFlags as SelectableFlags } from "./bind-imgui"; +export { ImGuiComboFlags, ImGuiComboFlags as ComboFlags } from "./bind-imgui"; +export { ImGuiFocusedFlags, ImGuiFocusedFlags as FocusedFlags } from "./bind-imgui"; +export { ImGuiHoveredFlags, ImGuiHoveredFlags as HoveredFlags } from "./bind-imgui"; +export { ImGuiDragDropFlags, ImGuiDragDropFlags as DragDropFlags } from "./bind-imgui"; +export { ImGuiKey, ImGuiKey as Key } from "./bind-imgui"; +export { ImGuiCol, ImGuiCol as Col } from "./bind-imgui"; +export { ImGuiStyleVar, ImGuiStyleVar as StyleVar } from "./bind-imgui"; +export { ImGuiColorEditFlags, ImGuiColorEditFlags as ColorEditFlags } from "./bind-imgui"; +export { ImGuiMouseCursor, ImGuiMouseCursor as MouseCursor } from "./bind-imgui"; +export { ImGuiCond, ImGuiCond as Cond } from "./bind-imgui"; + +export { ImU32 } from "./bind-imgui"; + +export { interface_ImVec2 } from "./bind-imgui"; +export { reference_ImVec2 } from "./bind-imgui"; + +export class ImVec2 implements bind.interface_ImVec2 { + public static readonly ZERO: Readonly = new ImVec2(0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec2(1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec2(1.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec2(0.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + return true; + } +} + +export { interface_ImVec4 } from "./bind-imgui"; +export { reference_ImVec4 } from "./bind-imgui"; + +export class ImVec4 implements bind.interface_ImVec4 { + public static readonly ZERO: Readonly = new ImVec4(0.0, 0.0, 0.0, 0.0); + public static readonly UNIT: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + public static readonly UNIT_X: Readonly = new ImVec4(1.0, 0.0, 0.0, 0.0); + public static readonly UNIT_Y: Readonly = new ImVec4(0.0, 1.0, 0.0, 0.0); + public static readonly UNIT_Z: Readonly = new ImVec4(0.0, 0.0, 1.0, 0.0); + public static readonly UNIT_W: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly BLACK: Readonly = new ImVec4(0.0, 0.0, 0.0, 1.0); + public static readonly WHITE: Readonly = new ImVec4(1.0, 1.0, 1.0, 1.0); + + constructor(public x: number = 0.0, public y: number = 0.0, public z: number = 0.0, public w: number = 1.0) {} + + public Copy(other: Readonly): this { + this.x = other.x; + this.y = other.y; + this.z = other.z; + this.w = other.w; + return this; + } + + public Equals(other: Readonly): boolean { + if (this.x !== other.x) { return false; } + if (this.y !== other.y) { return false; } + if (this.z !== other.z) { return false; } + if (this.w !== other.w) { return false; } + return true; + } +} + +//----------------------------------------------------------------------------- +// Helpers +//----------------------------------------------------------------------------- + +// Lightweight std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug). +// Our implementation does NOT call C++ constructors/destructors. This is intentional and we do not require it. Do not use this class as a straight std::vector replacement in your code! +export class ImVector +{ + public get Size(): number { return this.Data.length; } + public Data: T[] = []; + public empty(): boolean { return this.Data.length === 0; } + public clear(): void { this.Data.length = 0; } + public pop_back(): T | undefined { return this.Data.pop(); } + public push_back(value: T): void { this.Data.push(value); } + // public: + // int Size; + // int Capacity; + // T* Data; + + // typedef T value_type; + // typedef value_type* iterator; + // typedef const value_type* const_iterator; + + // inline ImVector() { Size = Capacity = 0; Data = NULL; } + // inline ~ImVector() { if (Data) ImGui::MemFree(Data); } + + // inline bool empty() const { return Size == 0; } + // inline int size() const { return Size; } + // inline int capacity() const { return Capacity; } + + // inline value_type& operator[](int i) { IM_ASSERT(i < Size); return Data[i]; } + // inline const value_type& operator[](int i) const { IM_ASSERT(i < Size); return Data[i]; } + + // inline void clear() { if (Data) { Size = Capacity = 0; ImGui::MemFree(Data); Data = NULL; } } + // inline iterator begin() { return Data; } + // inline const_iterator begin() const { return Data; } + // inline iterator end() { return Data + Size; } + // inline const_iterator end() const { return Data + Size; } + // inline value_type& front() { IM_ASSERT(Size > 0); return Data[0]; } + // inline const value_type& front() const { IM_ASSERT(Size > 0); return Data[0]; } + // inline value_type& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline const value_type& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; } + // inline void swap(ImVector& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; value_type* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } + + // inline int _grow_capacity(int size) const { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > size ? new_capacity : size; } + + // inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } + // inline void resize(int new_size, const T& v){ if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) Data[n] = v; Size = new_size; } + // inline void reserve(int new_capacity) + // { + // if (new_capacity <= Capacity) + // return; + // T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(T)); + // if (Data) + // memcpy(new_data, Data, (size_t)Size * sizeof(T)); + // ImGui::MemFree(Data); + // Data = new_data; + // Capacity = new_capacity; + // } + + // inline void push_back(const value_type& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); Data[Size++] = v; } + // inline void pop_back() { IM_ASSERT(Size > 0); Size--; } + // inline void push_front(const value_type& v) { if (Size == 0) push_back(v); else insert(Data, v); } + + // inline iterator erase(const_iterator it) { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(value_type)); Size--; return Data + off; } + // inline iterator insert(const_iterator it, const value_type& v) { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(value_type)); Data[off] = v; Size++; return Data + off; } + // inline bool contains(const value_type& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } +} + +// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" +export class ImGuiTextFilter +{ + // struct TextRange + // { + // const char* b; + // const char* e; + + // TextRange() { b = e = NULL; } + // TextRange(const char* _b, const char* _e) { b = _b; e = _e; } + // const char* begin() const { return b; } + // const char* end() const { return e; } + // bool empty() const { return b == e; } + // char front() const { return *b; } + // static bool is_blank(char c) { return c == ' ' || c == '\t'; } + // void trim_blanks() { while (b < e && is_blank(*b)) b++; while (e > b && is_blank(*(e-1))) e--; } + // IMGUI_API void split(char separator, ImVector& out); + // }; + + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256); + // ImVector Filters; + // int CountGrep; + CountGrep: number = 0; + + // IMGUI_API ImGuiTextFilter(const char* default_filter = ""); + constructor(default_filter: string = "") { + if (default_filter) + { + // ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf)); + this.InputBuf.buffer = default_filter; + this.Build(); + } + else + { + // InputBuf[0] = 0; + this.InputBuf.buffer = ""; + this.CountGrep = 0; + } + } + // IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build + public Draw(label: string = "Filter (inc,-exc)", width: number = 0.0): boolean { + if (width !== 0.0) + bind.PushItemWidth(width); + const value_changed: boolean = InputText(label, this.InputBuf, IM_ARRAYSIZE(this.InputBuf)); + if (width !== 0.0) + bind.PopItemWidth(); + if (value_changed) + this.Build(); + return value_changed; + } + // IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const; + public PassFilter(text: string, text_end: number | null = null): boolean { + // if (Filters.empty()) + // return true; + + // if (text == NULL) + // text = ""; + + // for (int i = 0; i != Filters.Size; i++) + // { + // const TextRange& f = Filters[i]; + // if (f.empty()) + // continue; + // if (f.front() == '-') + // { + // // Subtract + // if (ImStristr(text, text_end, f.begin()+1, f.end()) != NULL) + // return false; + // } + // else + // { + // // Grep + // if (ImStristr(text, text_end, f.begin(), f.end()) != NULL) + // return true; + // } + // } + + // Implicit * grep + if (this.CountGrep === 0) + return true; + + return false; + } + // IMGUI_API void Build(); + public Build(): void { + // Filters.resize(0); + // TextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); + // input_range.split(',', Filters); + + this.CountGrep = 0; + // for (int i = 0; i != Filters.Size; i++) + // { + // Filters[i].trim_blanks(); + // if (Filters[i].empty()) + // continue; + // if (Filters[i].front() != '-') + // CountGrep += 1; + // } + } + // void Clear() { InputBuf[0] = 0; Build(); } + public Clear(): void { this.InputBuf.buffer = ""; this.Build(); } + // bool IsActive() const { return !Filters.empty(); } + public IsActive(): boolean { return false; } +} + +// Helper: Text buffer for logging/accumulating text +export class ImGuiTextBuffer +{ + // ImVector Buf; + Buf: string = ""; + begin(): string { return this.Buf; } + size(): number { return this.Buf.length; } + clear(): void { this.Buf = ""; } + append(text: string): void { this.Buf += text; } + + // ImGuiTextBuffer() { Buf.push_back(0); } + // inline char operator[](int i) { return Buf.Data[i]; } + // const char* begin() const { return &Buf.front(); } + // const char* end() const { return &Buf.back(); } // Buf is zero-terminated, so end() will point on the zero-terminator + // int size() const { return Buf.Size - 1; } + // bool empty() { return Buf.Size <= 1; } + // void clear() { Buf.clear(); Buf.push_back(0); } + // void reserve(int capacity) { Buf.reserve(capacity); } + // const char* c_str() const { return Buf.Data; } + // IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2); + // IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2); +} + +// Helper: Simple Key->value storage +// Typically you don't have to worry about this since a storage is held within each Window. +// We use it to e.g. store collapse state for a tree (Int 0/1), store color edit options. +// This is optimized for efficient reading (dichotomy into a contiguous buffer), rare writing (typically tied to user interactions) +// You can use it as custom user storage for temporary values. Declare your own storage if, for example: +// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state). +// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient) +// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types. +export class ImGuiStorage +{ + // struct Pair + // { + // ImGuiID key; + // union { int val_i; float val_f; void* val_p; }; + // Pair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; } + // Pair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; } + // Pair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; } + // }; + // ImVector Data; + + // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N) + // - Set***() functions find pair, insertion on demand if missing. + // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair. + // void Clear() { Data.clear(); } + // IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const; + // IMGUI_API void SetInt(ImGuiID key, int val); + // IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const; + // IMGUI_API void SetBool(ImGuiID key, bool val); + // IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const; + // IMGUI_API void SetFloat(ImGuiID key, float val); + // IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL + // IMGUI_API void SetVoidPtr(ImGuiID key, void* val); + + // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set. + // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer. + // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct) + // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar; + // IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0); + // IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false); + // IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f); + // IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL); + + // Use on your own storage if you know only integer are being stored (open/close all tree nodes) + // IMGUI_API void SetAllInt(int val); + + // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once. + // IMGUI_API void BuildSortByKey(); +} + +// Data payload for Drag and Drop operations +export class ImGuiPayload +{ + // Members + // const void* Data; // Data (copied and owned by dear imgui) + // int DataSize; // Data size + + // [Internal] + // ImGuiID SourceId; // Source item id + // ImGuiID SourceParentId; // Source parent id (if available) + // int DataFrameCount; // Data timestamp + // char DataType[8 + 1]; // Data type tag (short user-supplied string) + // bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + // bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. + + // ImGuiPayload() { Clear(); } + // void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; } + // bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; } + // bool IsPreview() const { return Preview; } + // bool IsDelivery() const { return Delivery; } +} + +// Helpers macros to generate 32-bits encoded colors +export const IM_COL32_R_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 16 : 0; +export const IM_COL32_G_SHIFT: number = 8; +export const IM_COL32_B_SHIFT: number = config.IMGUI_USE_BGRA_PACKED_COLOR ? 0 : 16; +export const IM_COL32_A_SHIFT: number = 24; +export const IM_COL32_A_MASK: number = 0xFF000000; +export function IM_COL32(R: number, G: number, B: number, A: number = 255): number { + return ((A << IM_COL32_A_SHIFT) | (B << IM_COL32_B_SHIFT) | (G << IM_COL32_G_SHIFT) | (R << IM_COL32_R_SHIFT)) >>> 0; +} +export const IM_COL32_WHITE: number = IM_COL32(255,255,255,255); // Opaque white = 0xFFFFFFFF +export const IM_COL32_BLACK: number = IM_COL32(0,0,0,255); // Opaque black +export const IM_COL32_BLACK_TRANS: number = IM_COL32(0,0,0,0); // Transparent black = 0x00000000 + +// ImColor() helper to implicity converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float) +// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API. +// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE. +// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed. +export class ImColor +{ + // ImVec4 Value; + public Value: ImVec4 = new ImVec4(); + + // ImColor() { Value.x = Value.y = Value.z = Value.w = 0.0f; } + // ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } + // ImColor(ImU32 rgba) { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } + // ImColor(float r, float g, float b, float a = 1.0f) { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } + // ImColor(const ImVec4& col) { Value = col; } + constructor(r: number | bind.ImU32 | Readonly = 0.0, g: number = 0.0, b: number = 0.0, a: number = 1.0) { + if (typeof(r) === "number") { + if (r > 255 && g === 0.0 && b === 0.0 && a === 1.0) { + this.Value.x = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_R_SHIFT) & 0xFF) / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_G_SHIFT) & 0xFF) / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_B_SHIFT) & 0xFF) / 255)); + this.Value.w = Math.max(0.0, Math.min(1.0, ((r >> IM_COL32_A_SHIFT) & 0xFF) / 255)); + } else if (r <= 1.0 && g <= 1.0 && b <= 1.0 && a <= 1.0) { + this.Value.x = Math.max(0.0, r); + this.Value.y = Math.max(0.0, g); + this.Value.z = Math.max(0.0, b); + this.Value.w = Math.max(0.0, a); + } else { + this.Value.x = Math.max(0.0, Math.min(1.0, r / 255)); + this.Value.y = Math.max(0.0, Math.min(1.0, g / 255)); + this.Value.z = Math.max(0.0, Math.min(1.0, b / 255)); + if (a <= 1.0) { + this.Value.w = Math.max(0.0, a); + } else { + this.Value.w = Math.max(0.0, Math.min(1.0, a / 255)); + } + } + } else { + this.Value.Copy(r); + } + } + // inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); } + toImU32(): bind.ImU32 { return bind.ColorConvertFloat4ToU32(this.Value); } + // inline operator ImVec4() const { return Value; } + toImVec4(): ImVec4 { return this.Value; } + + // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. + // inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } + SetHSV(h: number, s: number, v: number, a: number = 1.0): void { + const ref_r: bind.ImScalar = [ this.Value.x ]; + const ref_g: bind.ImScalar = [ this.Value.y ]; + const ref_b: bind.ImScalar = [ this.Value.z ]; + bind.ColorConvertHSVtoRGB(h, s, v, ref_r, ref_g, ref_b); + this.Value.x = ref_r[0]; + this.Value.y = ref_g[0]; + this.Value.z = ref_b[0]; + this.Value.w = a; + } + // static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } + static HSV(h: number, s: number, v: number, a: number = 1.0): ImColor { + const color = new ImColor(); + color.SetHSV(h, s, v, a); + return color; + } +} + +export const ImGuiTextEditDefaultSize: number = 128; + +export type ImGuiTextEditCallback = (data: ImGuiTextEditCallbackData) => number; + +// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered. +export class ImGuiTextEditCallbackData { + constructor(public native: bind.ImGuiTextEditCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + // ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + public get EventFlag(): bind.ImGuiInputTextFlags { return this.native.EventFlag; } + // ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + public get Flags(): bind.ImGuiInputTextFlags { return this.native.Flags; } + // void* UserData; // What user passed to InputText() // Read-only + public get UserData(): any { return this.native.UserData; } + // bool ReadOnly; // Read-only mode // Read-only + public get ReadOnly(): boolean { return this.native.ReadOnly; } + + // CharFilter event: + // ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + public get EventChar(): bind.ImWchar { return this.native.EventChar; } + public set EventChar(value: bind.ImWchar) { this.native.EventChar = value; } + + // Completion,History,Always events: + // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true. + // ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + public get EventKey(): bind.ImGuiKey { return this.native.EventKey; } + // char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + public get Buf(): string { return this.native.getBuf(); } + public set Buf(value: string) { this.native.setBuf(value); } + // int BufTextLen; // Current text length in bytes // Read-write + public get BufTextLen(): number { return this.native.BufTextLen; } + public set BufTextLen(value: number) { this.native.BufTextLen = value; } + // int BufSize; // Maximum text length in bytes // Read-only + public get BufSize(): number { return this.native.BufSize; } + // bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + public set BufDirty(value: boolean) { this.native.BufDirty = value; } + // int CursorPos; // // Read-write + public get CursorPos(): number { return this.native.CursorPos; } + public set CursorPos(value: number) { this.native.CursorPos = value; } + // int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + public get SelectionStart(): number { return this.native.SelectionStart; } + public set SelectionStart(value: number) { this.native.SelectionStart = value; } + // int SelectionEnd; // // Read-write + public get SelectionEnd(): number { return this.native.SelectionEnd; } + public set SelectionEnd(value: number) { this.native.SelectionEnd = value; } + + // NB: Helper functions for text manipulation. Calling those function loses selection. + // IMGUI_API void DeleteChars(int pos, int bytes_count); + public DeleteChars(pos: number, bytes_count: number): void { return this.native.DeleteChars(pos, bytes_count); } + // IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL); + public InsertChars(pos: number, text: string, text_end: number | null = null): void { return this.native.InsertChars(pos, text, text_end); } + // bool HasSelection() const { return SelectionStart != SelectionEnd; } + public HasSelection(): boolean { return this.native.HasSelection(); } +} + +export type ImGuiSizeConstraintCallback = (data: ImGuiSizeConstraintCallbackData) => void; + +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. +export class ImGuiSizeConstraintCallbackData { + constructor(public native: bind.ImGuiSizeConstraintCallbackData) {} + delete(): void { if (this.native) { this.native.delete(); delete this.native; } } + + get UserData(): any { return this.native.UserData; } + get Pos(): Readonly { return this.native.getPos(); } + get CurrentSize(): Readonly { return this.native.getCurrentSize(); } + get DesiredSize(): bind.interface_ImVec2 { return this.native.getDesiredSize(); } +} + +export class ImGuiListClipper +{ + private native: bind.ImGuiListClipper; + + public get StartPosY(): number { return this.native.StartPosY; } + public get ItemsHeight(): number { return this.native.ItemsHeight; } + public get ItemsCount(): number { return this.native.ItemsCount; } + public get StepNo(): number { return this.native.StepNo; } + public get DisplayStart(): number { return this.native.DisplayStart; } + public get DisplayEnd(): number { return this.native.DisplayEnd; } + + // items_count: Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step). + // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing(). + // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step(). + // ImGuiListClipper(int items_count = -1, float items_height = -1.0f) { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want). + constructor(items_count: number = -1, items_height: number = -1.0) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + // ~ImGuiListClipper() { IM_ASSERT(ItemsCount == -1); } // Assert if user forgot to call End() or Step() until false. + delete(): void { + if (this.native) { + this.native.delete(); + delete this.native; + } + } + + // IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. + public Step(): boolean { + if (!this.native) { throw new Error(); } + const busy: boolean = this.native.Step(); + if (!busy) { + this.delete(); + } + return busy; + } + // IMGUI_API void Begin(int items_count, float items_height = -1.0f); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. + public Begin(items_count: number, items_height: number): void { + if (!this.native) { + this.native = new bind.ImGuiListClipper(items_count, items_height); + } + this.native.Begin(items_count, items_height); + } + // IMGUI_API void End(); // Automatically called on the last call of Step() that returns false. + public End(): void { + if (!this.native) { throw new Error(); } + this.native.End(); + this.delete(); + } +} + +//----------------------------------------------------------------------------- +// Draw List +// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList. +//----------------------------------------------------------------------------- + +// Draw callbacks for advanced uses. +// NB- You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering (you can poke into the draw list for that) +// Draw callback may be useful for example, A) Change your GPU render state, B) render a complex 3D scene inside a UI element (without an intermediate texture/render target), etc. +// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) cmd.UserCallback(parent_list, cmd); else RenderTriangles()' +// typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); +export type ImDrawCallback = (parent_list: Readonly, cmd: Readonly) => void; + +// Typically, 1 command = 1 GPU draw call (unless command is a callback) +export class ImDrawCmd +{ + constructor(public readonly native: bind.reference_ImDrawCmd) {} + + // unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + get ElemCount(): number { return this.native.ElemCount; } + // ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + get ClipRect(): Readonly { return this.native.getClipRect(); } + // ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + get TextureId(): bind.ImTextureID { return this.native.TextureId; } + // ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + // void* UserCallbackData; // The draw callback code can access this. + + // ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; } +} + +// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h) +// #ifndef ImDrawIdx +// typedef unsigned short ImDrawIdx; +// #endif +export { ImDrawIdxSize } from "./bind-imgui"; +export type ImDrawIdx = number; + +// Vertex layout +// #ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT +export { ImDrawVertSize } from "./bind-imgui"; +export { ImDrawVertPosOffset } from "./bind-imgui"; +export { ImDrawVertUVOffset } from "./bind-imgui"; +export { ImDrawVertColOffset } from "./bind-imgui"; +export class ImDrawVert +{ + // ImVec2 pos; + public pos: Float32Array; + // ImVec2 uv; + public uv: Float32Array; + // ImU32 col; + public col: Uint32Array; + + constructor(buffer: ArrayBuffer, byteOffset: number = 0) { + this.pos = new Float32Array(buffer, byteOffset + bind.ImDrawVertPosOffset, 2); + this.uv = new Float32Array(buffer, byteOffset + bind.ImDrawVertUVOffset, 2); + this.col = new Uint32Array(buffer, byteOffset + bind.ImDrawVertColOffset, 1); + } +} +// #else +// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h +// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine. +// The type has to be described within the macro (you can either declare the struct or use a typedef) +// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM. +// IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT; +// #endif + +// Draw channels are used by the Columns API to "split" the render list into different channels while building, so items of each column can be batched together. +// You can also use them to simulate drawing layers and submit primitives in a different order than how they will be rendered. +export class ImDrawChannel +{ + // ImVector CmdBuffer; + // ImVector IdxBuffer; +} + +export { ImDrawCornerFlags } from "./bind-imgui"; + +export { ImDrawListFlags } from "./bind-imgui"; + +export class ImDrawListSharedData +{ + constructor(public readonly native: bind.reference_ImDrawListSharedData) {} +} + +// Draw command list +// This is the low-level list of polygons that ImGui functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering. +// Each ImGui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to access the current window draw list and draw custom primitives. +// You can interleave normal ImGui:: calls and adding primitives to the current draw list. +// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), however you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well) +// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects. +export class ImDrawList +{ + constructor(public readonly native: bind.reference_ImDrawList) {} + + IterateDrawCmds(callback: (draw_cmd: ImDrawCmd, ElemStart: number) => void): void { + this.native.IterateDrawCmds((draw_cmd: bind.reference_ImDrawCmd, ElemStart: number): void => { + callback(new ImDrawCmd(draw_cmd), ElemStart); + }); + } + + // This is what you have to render + // ImVector CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + // ImVector IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + get IdxBuffer(): Uint8Array { return this.native.IdxBuffer; } + // ImVector VtxBuffer; // Vertex buffer. + get VtxBuffer(): Uint8Array { return this.native.VtxBuffer; } + + // [Internal, used while building lists] + // ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + // const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + // const char* _OwnerName; // Pointer to owner window's name for debugging + // unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + // ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much) + // ImVector _ClipRectStack; // [Internal] + // ImVector _TextureIdStack; // [Internal] + // ImVector _Path; // [Internal] current path building + // int _ChannelsCurrent; // [Internal] current channel number (0) + // int _ChannelsCount; // [Internal] number of active channels (1+) + // ImVector _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) + + // ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); } + // ~ImDrawList() { ClearFreeMemory(); } + // IMGUI_API void PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) + public PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean = false): void { + this.native.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); + } + // IMGUI_API void PushClipRectFullScreen(); + public PushClipRectFullScreen(): void { this.native.PushClipRectFullScreen(); } + // IMGUI_API void PopClipRect(); + public PopClipRect(): void { this.native.PopClipRect(); } + // IMGUI_API void PushTextureID(const ImTextureID& texture_id); + // IMGUI_API void PopTextureID(); + // inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); } + // inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); } + + // Primitives + // IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col, float thickness = 1.0f); + public AddLine(a: Readonly, b: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddLine(a, b, col, thickness); + } + // IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All, float thickness = 1.0f); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round + public AddRect(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All, thickness: number = 1.0): void { + this.native.AddRect(a, b, col, rounding, rounding_corners_flags, thickness); + } + // IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); // a: upper-left, b: lower-right + public AddRectFilled(a: Readonly, b: Readonly, col: bind.ImU32, rounding: number = 0.0, rounding_corners_flags: bind.ImDrawCornerFlags = bind.ImDrawCornerFlags.All): void { + this.native.AddRectFilled(a, b, col, rounding, rounding_corners_flags); + } + // IMGUI_API void AddRectFilledMultiColor(const ImVec2& a, const ImVec2& b, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left); + public AddRectFilledMultiColor(a: Readonly, b: Readonly, col_upr_left: bind.ImU32, col_upr_right: bind.ImU32, col_bot_right: bind.ImU32, col_bot_left: bind.ImU32): void { + this.native.AddRectFilledMultiColor(a, b, col_upr_left, col_upr_right, col_bot_right, col_bot_left); + } + // IMGUI_API void AddQuad(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col, float thickness = 1.0f); + public AddQuad(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddQuad(a, b, c, d, col, thickness); + } + // IMGUI_API void AddQuadFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, ImU32 col); + public AddQuadFilled(a: Readonly, b: Readonly, c: Readonly, d: Readonly, col: bind.ImU32): void { + this.native.AddQuadFilled(a, b, c, d, col); + } + // IMGUI_API void AddTriangle(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col, float thickness = 1.0f); + public AddTriangle(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32, thickness: number = 1.0): void { + this.native.AddTriangle(a, b, c, col, thickness); + } + // IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col); + public AddTriangleFilled(a: Readonly, b: Readonly, c: Readonly, col: bind.ImU32): void { + this.native.AddTriangleFilled(a, b, c, col); + } + // IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f); + public AddCircle(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12, thickness: number = 1.0): void { + this.native.AddCircle(centre, radius, col, num_segments, thickness); + } + // IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12); + public AddCircleFilled(centre: Readonly, radius: number, col: bind.ImU32, num_segments: number = 12): void { + this.native.AddCircleFilled(centre, radius, col, num_segments); + } + // IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL); + public AddText(pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null): void { + this.native.AddText(pos, col, text_begin, text_end); + } + // IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL); + public AddText_Font(font: ImFont, font_size: number, pos: Readonly, col: bind.ImU32, text_begin: string, text_end: number | null = null, wrap_width: number = 0.0, cpu_fine_clip_rect: Readonly | null = null): void { + this.native.AddText_Font(font.native, font_size, pos, col, text_begin, text_end, wrap_width, cpu_fine_clip_rect); + } + // IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a = ImVec2(0,0), const ImVec2& uv_b = ImVec2(1,0), const ImVec2& uv_c = ImVec2(1,1), const ImVec2& uv_d = ImVec2(0,1), ImU32 col = 0xFFFFFFFF); + // IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col, float rounding, int rounding_corners = ImDrawCornerFlags_All); + // IMGUI_API void AddPolyline(const ImVec2* points, const int num_points, ImU32 col, bool closed, float thickness); + // IMGUI_API void AddConvexPolyFilled(const ImVec2* points, const int num_points, ImU32 col); + // IMGUI_API void AddBezierCurve(const ImVec2& pos0, const ImVec2& cp0, const ImVec2& cp1, const ImVec2& pos1, ImU32 col, float thickness, int num_segments = 0); + public AddBezierCurve(pos0: Readonly, cp0: Readonly, cp1: Readonly, pos1: Readonly, col: bind.ImU32, thickness: number = 1.0, num_segments: number = 0): void { + this.native.AddBezierCurve(pos0, cp0, cp1, pos1, col, thickness, num_segments); + } + + // Stateful path API, add points then finish with PathFill() or PathStroke() + // inline void PathClear() { _Path.resize(0); } + // inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); } + // inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } + // inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); PathClear(); } + // inline void PathStroke(ImU32 col, bool closed, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); PathClear(); } + // IMGUI_API void PathArcTo(const ImVec2& centre, float radius, float a_min, float a_max, int num_segments = 10); + // IMGUI_API void PathArcToFast(const ImVec2& centre, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle + // IMGUI_API void PathBezierCurveTo(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, int num_segments = 0); + // IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, int rounding_corners_flags = ImDrawCornerFlags_All); + + // Channels + // - Use to simulate layers. By switching channels to can render out-of-order (e.g. submit foreground primitives before background primitives) + // - Use to minimize draw calls (e.g. if going back-and-forth between multiple non-overlapping clipping rectangles, prefer to append into separate channels then merge at the end) + // IMGUI_API void ChannelsSplit(int channels_count); + // IMGUI_API void ChannelsMerge(); + // IMGUI_API void ChannelsSetCurrent(int channel_index); + + // Advanced + // IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. + // IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible + + // Internal helpers + // NB: all primitives needs to be reserved via PrimReserve() beforehand! + // IMGUI_API void Clear(); + // IMGUI_API void ClearFreeMemory(); + // IMGUI_API void PrimReserve(int idx_count, int vtx_count); + // IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles) + // IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col); + // IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col); + // inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; } + // inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; } + // inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } + // IMGUI_API void UpdateClipRect(); + // IMGUI_API void UpdateTextureID(); +} + +// All draw data to render an ImGui frame +export class ImDrawData +{ + constructor(public readonly native: bind.reference_ImDrawData) {} + + IterateDrawLists(callback: (draw_list: ImDrawList) => void): void { + this.native.IterateDrawLists((draw_list: bind.reference_ImDrawList): void => { + callback(new ImDrawList(draw_list)); + }); + } + + // bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + get Valid(): boolean { return this.native.Valid; } + // ImDrawList** CmdLists; + // int CmdListsCount; + get CmdListsCount(): number { return this.native.CmdListsCount; } + // int TotalVtxCount; // For convenience, sum of all cmd_lists vtx_buffer.Size + get TotalVtxCount(): number { return this.native.TotalVtxCount; } + // int TotalIdxCount; // For convenience, sum of all cmd_lists idx_buffer.Size + get TotalIdxCount(): number { return this.native.TotalIdxCount; } + + // Functions + // ImDrawData() { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; } + // IMGUI_API void DeIndexAllBuffers(); // For backward compatibility or convenience: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! + // IMGUI_API void ScaleClipRects(const ImVec2& sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. + public ScaleClipRects(sc: Readonly): void { + this.native.ScaleClipRects(sc); + } +} + +export class ImFontConfig +{ + // void* FontData; // // TTF/OTF data + // int FontDataSize; // // TTF/OTF data size + // bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + // int FontNo; // 0 // Index of font within TTF/OTF file + // float SizePixels; // // Size in pixels for rasterizer. + // int OversampleH, OversampleV; // 3, 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + // bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + // ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + // ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + // const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + // bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + // unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + // float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + + // [Internal] + // char Name[32]; // Name (strictly to ease debugging) + // ImFont* DstFont; + + // IMGUI_API ImFontConfig(); +} + +// struct ImFontGlyph +export class ImFontGlyph +{ + // ImWchar Codepoint; // 0x0000..0xFFFF + // float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + // float X0, Y0, X1, Y1; // Glyph corners + // float U0, V0, U1, V1; // Texture coordinates +} + +// Load and rasterize multiple TTF/OTF fonts into a same texture. +// Sharing a texture for multiple fonts allows us to reduce the number of draw calls during rendering. +// We also add custom graphic data into the texture that serves for ImGui. +// 1. (Optional) Call AddFont*** functions. If you don't call any, the default font will be loaded for you. +// 2. Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data. +// 3. Upload the pixels data into a texture within your graphics system. +// 4. Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture. This value will be passed back to you during rendering to identify the texture. +// IMPORTANT: If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the ImFont is build (when calling GetTextData*** or Build()). We only copy the pointer, not the data. +export class ImFontAtlas +{ + constructor(public readonly native: bind.reference_ImFontAtlas) {} + + // IMGUI_API ImFontAtlas(); + // IMGUI_API ~ImFontAtlas(); + // IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg); + // IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL); + // IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); + // IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. + // IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. + // IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. + // IMGUI_API void ClearTexData(); // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory. + // IMGUI_API void ClearInputData(); // Clear the input TTF data (inc sizes, glyph ranges) + // IMGUI_API void ClearFonts(); // Clear the ImGui-side font data (glyphs storage, UV coordinates) + // IMGUI_API void Clear(); // Clear all + + // Build atlas, retrieve pixel data. + // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID(). + // RGBA32 format is provided for convenience and compatibility, but note that unless you use CustomRect to draw color data, the RGB pixels emitted from Fonts will all be white (~75% of waste). + // Pitch = Width * BytesPerPixels + // IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions. + // IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel + // IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel + GetTexDataAsRGBA32(): { pixels: Uint8Array, width: number, height: number } { + return this.native.GetTexDataAsRGBA32(); + } + // void SetTexID(ImTextureID id) { TexID = id; } + + //------------------------------------------- + // Glyph Ranges + //------------------------------------------- + + // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list) + // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details. + // IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin + // IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters + // IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesChinese(); // Default + Japanese + full set of about 21000 CJK Unified Ideographs + // IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters + // IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters + + // Helpers to build glyph ranges from text data. Feed your application strings/characters to it then call BuildRanges(). + // struct GlyphRangesBuilder + // { + // ImVector UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used) + // GlyphRangesBuilder() { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } + // bool GetBit(int n) { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } + // void SetBit(int n) { UsedChars[n >> 3] |= 1 << (n & 7); } // Set bit 'c' in the array + // void AddChar(ImWchar c) { SetBit(c); } // Add character + // IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added) + // IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext + // IMGUI_API void BuildRanges(ImVector* out_ranges); // Output new ranges + // }; + + //------------------------------------------- + // Custom Rectangles/Glyphs API + //------------------------------------------- + + // You can request arbitrary rectangles to be packed into the atlas, for your own purposes. After calling Build(), you can query the rectangle position and render your pixels. + // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point), so you can render e.g. custom colorful icons and use them as regular glyphs. + // struct CustomRect + // { + // unsigned int ID; // Input // User ID. Use <0x10000 to map into a font glyph, >=0x10000 for other/internal/custom texture data. + // unsigned short Width, Height; // Input // Desired rectangle dimension + // unsigned short X, Y; // Output // Packed position in Atlas + // float GlyphAdvanceX; // Input // For custom font glyphs only (ID<0x10000): glyph xadvance + // ImVec2 GlyphOffset; // Input // For custom font glyphs only (ID<0x10000): glyph display offset + // ImFont* Font; // Input // For custom font glyphs only (ID<0x10000): target font + // CustomRect() { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; } + // bool IsPacked() const { return X != 0xFFFF; } + // }; + + // IMGUI_API int AddCustomRectRegular(unsigned int id, int width, int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList + // IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0)); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. + // IMGUI_API void CalcCustomRectUV(const CustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max); + // const CustomRect* GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; } + + //------------------------------------------- + // Members + //------------------------------------------- + + // ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + get TexID(): bind.ImTextureID { return this.native.getTexID(); } + set TexID(value: bind.ImTextureID) { this.native.setTexID(value); } + // int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + // int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + + // [Internal] + // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you. + // unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + // unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + // int TexWidth; // Texture width calculated during Build(). + get TexWidth(): number { return this.native.TexWidth; } + // int TexHeight; // Texture height calculated during Build(). + get TexHeight(): number { return this.native.TexHeight; } + // ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + // ImVector Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + // ImVector CustomRects; // Rectangles for packing custom texture data into the atlas. + // ImVector ConfigData; // Internal data + // int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList +} + +// Font runtime data and rendering +// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32(). +export class ImFont +{ + constructor(public readonly native: bind.reference_ImFont) {} + + // Members: Hot ~62/78 bytes + // float FontSize; // // Height of characters, set during loading (don't change after loading) + // float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + // ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels + // ImVector Glyphs; // // All glyphs. + // ImVector IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + // ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + // const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + // float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + // ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + + // Members: Cold ~18/26 bytes + // short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + // ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + // ImFontAtlas* ContainerAtlas; // // What we has been loaded into + // float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] + // int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) + + // Methods + // IMGUI_API ImFont(); + // IMGUI_API ~ImFont(); + // IMGUI_API void ClearOutputData(); + // IMGUI_API void BuildLookupTable(); + // IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const; + // IMGUI_API void SetFallbackChar(ImWchar c); + // float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } + // bool IsLoaded() const { return ContainerAtlas != NULL; } + // const char* GetDebugName() const { return ConfigData ? ConfigData->Name : ""; } + GetDebugName(): string { return this.native.GetDebugName(); } + + // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. + // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. + // IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8 + // IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const; + // IMGUI_API void RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, unsigned short c) const; + // IMGUI_API void RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const; + + // [Internal] + // IMGUI_API void GrowIndex(int new_size); + // IMGUI_API void AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x); + // IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. + + // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS + // typedef ImFontGlyph Glyph; // OBSOLETE 1.52+ + // #endif +} + +// a script version of bind.ImGuiStyle with matching interface +class script_ImGuiStyle implements bind.interface_ImGuiStyle { + Alpha: number = 1.0; // Global alpha applies to everything in ImGui + private WindowPadding: ImVec2 = new ImVec2(8,8); // Padding within a window + getWindowPadding(): bind.interface_ImVec2 { return this.WindowPadding; } + WindowRounding: number = 7.0; // Radius of window corners rounding. Set to 0.0f to have rectangular windows + WindowBorderSize: number = 0.0; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private WindowMinSize: ImVec2 = new ImVec2(32,32); // Minimum window size + getWindowMinSize(): bind.interface_ImVec2 { return this.WindowMinSize; } + private WindowTitleAlign: ImVec2 = new ImVec2(0.0,0.5); // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + getWindowTitleAlign(): bind.interface_ImVec2 { return this.WindowTitleAlign; } + ChildRounding: number = 0.0; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + ChildBorderSize: number = 1.0; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + PopupRounding: number = 0.0; // Radius of popup window corners rounding. + PopupBorderSize: number = 1.0; // Thickness of border around popup windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private FramePadding: ImVec2 = new ImVec2(4,3); // Padding within a framed rectangle (used by most widgets) + getFramePadding(): bind.interface_ImVec2 { return this.FramePadding; } + FrameRounding: number = 0.0; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + FrameBorderSize: number = 0.0; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly) + private ItemSpacing: ImVec2 = new ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines + getItemSpacing(): bind.interface_ImVec2 { return this.ItemSpacing; } + private ItemInnerSpacing: ImVec2 = new ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label) + getItemInnerSpacing(): bind.interface_ImVec2 { return this.ItemInnerSpacing; } + private TouchExtraPadding: ImVec2 = new ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + getTouchExtraPadding(): bind.interface_ImVec2 { return this.TouchExtraPadding; } + IndentSpacing: number = 21.0; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + ColumnsMinSpacing: number = 6.0; // Minimum horizontal spacing between two columns + ScrollbarSize: number = 16.0; // Width of the vertical scrollbar, Height of the horizontal scrollbar + ScrollbarRounding: number = 9.0; // Radius of grab corners for scrollbar + GrabMinSize: number = 10.0; // Minimum width/height of a grab box for slider/scrollbar. + GrabRounding: number = 0.0; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + private ButtonTextAlign: ImVec2 = new ImVec2(0.5,0.5); // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + getButtonTextAlign(): bind.interface_ImVec2 { return this.ButtonTextAlign; } + private DisplayWindowPadding: ImVec2 = new ImVec2(22,22);// Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + getDisplayWindowPadding(): bind.interface_ImVec2 { return this.DisplayWindowPadding; } + private DisplaySafeAreaPadding: ImVec2 = new ImVec2(4,4);// If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + getDisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.DisplaySafeAreaPadding; } + AntiAliasedLines: boolean = true; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + AntiAliasedFill: boolean = true; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + CurveTessellationTol: number = 1.25; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. + private Colors: ImVec4[] = []; + getColorsAt(index: number): bind.interface_ImVec4 { return this.Colors[index]; } + setColorsAt(index: number, color: Readonly): boolean { this.Colors[index].Copy(color); return true; } + + constructor() { + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i] = new ImVec4(); + } + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + bind.StyleColorsClassic(native); + _this.Copy(_that); + native.delete(); + } + + public ScaleAllSizes(scale_factor: number): void { + const _this = new ImGuiStyle(this); + const native = new bind.ImGuiStyle(); + const _that = new ImGuiStyle(native); + _that.Copy(_this); + native.ScaleAllSizes(scale_factor); + _this.Copy(_that); + native.delete(); + } +} + +export class ImGuiStyle +{ + constructor(public readonly internal: bind.interface_ImGuiStyle = new script_ImGuiStyle()) {} + + get Alpha(): number { return this.internal.Alpha; } set Alpha(value: number) { this.internal.Alpha = value; } + get WindowPadding(): bind.interface_ImVec2 { return this.internal.getWindowPadding(); } + get WindowRounding(): number { return this.internal.WindowRounding; } set WindowRounding(value: number) { this.internal.WindowRounding = value; } + get WindowBorderSize(): number { return this.internal.WindowBorderSize; } set WindowBorderSize(value: number) { this.internal.WindowBorderSize = value; } + get WindowMinSize(): bind.interface_ImVec2 { return this.internal.getWindowMinSize(); } + get WindowTitleAlign(): bind.interface_ImVec2 { return this.internal.getWindowTitleAlign(); } + get ChildRounding(): number { return this.internal.ChildRounding; } set ChildRounding(value: number) { this.internal.ChildRounding = value; } + get ChildBorderSize(): number { return this.internal.ChildBorderSize; } set ChildBorderSize(value: number) { this.internal.ChildBorderSize = value; } + get PopupRounding(): number { return this.internal.PopupRounding; } set PopupRounding(value: number) { this.internal.PopupRounding = value; } + get PopupBorderSize(): number { return this.internal.PopupBorderSize; } set PopupBorderSize(value: number) { this.internal.PopupBorderSize = value; } + get FramePadding(): bind.interface_ImVec2 { return this.internal.getFramePadding(); } + get FrameRounding(): number { return this.internal.FrameRounding; } set FrameRounding(value: number) { this.internal.FrameRounding = value; } + get FrameBorderSize(): number { return this.internal.FrameBorderSize; } set FrameBorderSize(value: number) { this.internal.FrameBorderSize = value; } + get ItemSpacing(): bind.interface_ImVec2 { return this.internal.getItemSpacing(); } + get ItemInnerSpacing(): bind.interface_ImVec2 { return this.internal.getItemInnerSpacing(); } + get TouchExtraPadding(): bind.interface_ImVec2 { return this.internal.getTouchExtraPadding(); } + get IndentSpacing(): number { return this.internal.IndentSpacing; } set IndentSpacing(value: number) { this.internal.IndentSpacing = value; } + get ColumnsMinSpacing(): number { return this.internal.ColumnsMinSpacing; } set ColumnsMinSpacing(value: number) { this.internal.ColumnsMinSpacing = value; } + get ScrollbarSize(): number { return this.internal.ScrollbarSize; } set ScrollbarSize(value: number) { this.internal.ScrollbarSize = value; } + get ScrollbarRounding(): number { return this.internal.ScrollbarRounding; } set ScrollbarRounding(value: number) { this.internal.ScrollbarRounding = value; } + get GrabMinSize(): number { return this.internal.GrabMinSize; } set GrabMinSize(value: number) { this.internal.GrabMinSize = value; } + get GrabRounding(): number { return this.internal.GrabRounding; } set GrabRounding(value: number) { this.internal.GrabRounding = value; } + get ButtonTextAlign(): bind.interface_ImVec2 { return this.internal.getButtonTextAlign(); } + get DisplayWindowPadding(): bind.interface_ImVec2 { return this.internal.getDisplayWindowPadding(); } + get DisplaySafeAreaPadding(): bind.interface_ImVec2 { return this.internal.getDisplaySafeAreaPadding(); } + get AntiAliasedLines(): boolean { return this.internal.AntiAliasedLines; } set AntiAliasedLines(value: boolean) { this.internal.AntiAliasedLines = value; } + get AntiAliasedFill(): boolean { return this.internal.AntiAliasedFill; } set AntiAliasedFill(value: boolean) { this.internal.AntiAliasedFill = value; } + get CurveTessellationTol(): number { return this.internal.CurveTessellationTol; } set CurveTessellationTol(value: number) { this.internal.CurveTessellationTol = value; } + public Colors: bind.interface_ImVec4[] = new Proxy([], { + get: (target: bind.interface_ImVec4[], key: PropertyKey): number | bind.interface_ImVec4 => { + if (key === "length") { return bind.ImGuiCol.COUNT; } + return this.internal.getColorsAt(Number(key)); + }, + set: (target: bind.interface_ImVec4[], key: PropertyKey, value: Readonly): boolean => { + return this.internal.setColorsAt(Number(key), value); + } + }); + + public Copy(other: Readonly): this { + this.Alpha = other.Alpha; + this.WindowPadding.Copy(this.WindowPadding); + this.WindowRounding = other.WindowRounding; + this.WindowBorderSize = other.WindowBorderSize; + this.WindowMinSize.Copy(this.WindowMinSize); + this.WindowTitleAlign.Copy(this.WindowTitleAlign); + this.ChildRounding = other.ChildRounding; + this.ChildBorderSize = other.ChildBorderSize; + this.PopupRounding = other.PopupRounding; + this.PopupBorderSize = other.PopupBorderSize; + this.FramePadding.Copy(this.FramePadding); + this.FrameRounding = other.FrameRounding; + this.FrameBorderSize = other.FrameBorderSize; + this.ItemSpacing.Copy(this.ItemSpacing); + this.ItemInnerSpacing.Copy(this.ItemInnerSpacing); + this.TouchExtraPadding.Copy(this.TouchExtraPadding); + this.IndentSpacing = other.IndentSpacing; + this.ColumnsMinSpacing = other.ColumnsMinSpacing; + this.ScrollbarSize = other.ScrollbarSize; + this.ScrollbarRounding = other.ScrollbarRounding; + this.GrabMinSize = other.GrabMinSize; + this.GrabRounding = other.GrabRounding; + this.ButtonTextAlign.Copy(this.ButtonTextAlign); + this.DisplayWindowPadding.Copy(this.DisplayWindowPadding); + this.DisplaySafeAreaPadding.Copy(this.DisplaySafeAreaPadding); + this.AntiAliasedLines = other.AntiAliasedLines; + this.AntiAliasedFill = other.AntiAliasedFill; + this.CurveTessellationTol = other.CurveTessellationTol; + for (let i = 0; i < bind.ImGuiCol.COUNT; ++i) { + this.Colors[i].Copy(other.Colors[i]); + } + return this; + } + + public ScaleAllSizes(scale_factor: number): void { this.internal.ScaleAllSizes(scale_factor); } +} + +// This is where your app communicate with ImGui. Access via ImGui::GetIO(). +// Read 'Programmer guide' section in .cpp file for general usage. +export class ImGuiIO +{ + static RenderDrawListsFn: (draw_data: ImDrawData) => void; + + constructor(public readonly native: bind.reference_ImGuiIO) {} + + //------------------------------------------------------------------ + // Settings (fill once) // Default value: + //------------------------------------------------------------------ + + // ImVec2 DisplaySize; // // Display size, in pixels. For clamping windows positions. + get DisplaySize(): bind.reference_ImVec2 { return this.native.getDisplaySize(); } + // float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + get DeltaTime(): number { return this.native.DeltaTime; } + set DeltaTime(value: number) { this.native.DeltaTime = value; } + // float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + // const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + // const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + // float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + // float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + // float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging + // int KeyMap[ImGuiKey_COUNT]; // // Map of indices into the KeysDown[512] entries array + public KeyMap: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return bind.ImGuiKey.COUNT; } + return this.native.getKeyMapAt(Number(key)); + }, + set: (target: number[], key: PropertyKey, value: number): boolean => { + return this.native.setKeyMapAt(Number(key), value); + } + }); + // float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + // float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + // void* UserData; // = NULL // Store your own data for retrieval by callbacks. + + // ImFontAtlas* Fonts; // // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + get Fonts(): ImFontAtlas { return new ImFontAtlas(this.native.getFonts()); } + // float FontGlobalScale; // = 1.0f // Global scale all fonts + get FontGlobalScale(): number { return this.native.FontGlobalScale; } + set FontGlobalScale(value: number) { this.native.FontGlobalScale = value; } + // bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + get FontAllowUserScaling(): boolean { return false; } + // ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + // ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + get DisplayFramebufferScale(): bind.reference_ImVec2 { return this.native.getDisplayFramebufferScale(); } + // ImVec2 DisplayVisibleMin; // (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + // ImVec2 DisplayVisibleMax; // (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + + // Advanced/subtle behaviors + // bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + // bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. + + //------------------------------------------------------------------ + // Settings (User Functions) + //------------------------------------------------------------------ + + // Rendering function, will be called in Render(). + // Alternatively you can keep this to NULL and call GetDrawData() after Render() to get the same pointer. + // See example applications if you are unsure of how to implement this. + // void (*RenderDrawListsFn)(ImDrawData* data); + get RenderDrawListsFn(): (draw_data: ImDrawData) => void { return ImGuiIO.RenderDrawListsFn; } + set RenderDrawListsFn(value: (draw_data: ImDrawData) => void) { ImGuiIO.RenderDrawListsFn = value; } + + // Optional: access OS clipboard + // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures) + // const char* (*GetClipboardTextFn)(void* user_data); + // void (*SetClipboardTextFn)(void* user_data, const char* text); + // void* ClipboardUserData; + + // Optional: override memory allocations. MemFreeFn() may be called with a NULL pointer. + // (default to posix malloc/free) + // void* (*MemAllocFn)(size_t sz); + // void (*MemFreeFn)(void* ptr); + + // Optional: notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME in Windows) + // (default to use native imm32 api on Windows) + // void (*ImeSetInputScreenPosFn)(int x, int y); + // void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + + //------------------------------------------------------------------ + // Input - Fill before calling NewFrame() + //------------------------------------------------------------------ + + // ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + get MousePos(): bind.reference_ImVec2 { return this.native.getMousePos(); } + // bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + public MouseDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 5; } + return this.native.getMouseDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setMouseDownAt(Number(key), value); + } + }); + // float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + public get MouseWheel(): number { return this.native.MouseWheel; } + public set MouseWheel(value: number) { this.native.MouseWheel = value; } + // bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + get MouseDrawCursor(): boolean { return this.native.MouseDrawCursor; } set MouseDrawCursor(value: boolean) { this.native.MouseDrawCursor = value; } + // bool KeyCtrl; // Keyboard modifier pressed: Control + get KeyCtrl(): boolean { return this.native.KeyCtrl; } set KeyCtrl(value: boolean) { this.native.KeyCtrl = value; } + // bool KeyShift; // Keyboard modifier pressed: Shift + get KeyShift(): boolean { return this.native.KeyShift; } set KeyShift(value: boolean) { this.native.KeyShift = value; } + // bool KeyAlt; // Keyboard modifier pressed: Alt + get KeyAlt(): boolean { return this.native.KeyAlt; } set KeyAlt(value: boolean) { this.native.KeyAlt = value; } + // bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + get KeySuper(): boolean { return this.native.KeySuper; } set KeySuper(value: boolean) { this.native.KeySuper = value; } + // bool KeysDown[512]; // Keyboard keys that are pressed (in whatever storage order you naturally have access to keyboard data) + public KeysDown: boolean[] = new Proxy([], { + get: (target: boolean[], key: PropertyKey): number | boolean => { + if (key === "length") { return 512; } + return this.native.getKeysDownAt(Number(key)); + }, + set: (target: boolean[], key: PropertyKey, value: boolean): boolean => { + return this.native.setKeysDownAt(Number(key), value); + } + }); + // ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + + // Functions + // IMGUI_API void AddInputCharacter(ImWchar c); // Add new character into InputCharacters[] + public AddInputCharacter(c: number): void { this.native.AddInputCharacter(c); } + // IMGUI_API void AddInputCharactersUTF8(const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string + // inline void ClearInputCharacters() { InputCharacters[0] = 0; } // Clear the text input buffer manually + + //------------------------------------------------------------------ + // Output - Retrieve after calling NewFrame() + //------------------------------------------------------------------ + + // bool WantCaptureMouse; // When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. This is set by ImGui when it wants to use your mouse (e.g. unclicked mouse is hovering a window, or a widget is active). + get WantCaptureMouse(): boolean { return this.native.WantCaptureMouse; } set WantCaptureMouse(value: boolean) { this.native.WantCaptureMouse = value; } + // bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. This is set by ImGui when it wants to use your keyboard inputs. + get WantCaptureKeyboard(): boolean { return this.native.WantCaptureKeyboard; } set WantCaptureKeyboard(value: boolean) { this.native.WantCaptureKeyboard = value; } + // bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + get WantTextInput(): boolean { return this.native.WantTextInput; } set WantTextInput(value: boolean) { this.native.WantTextInput = value; } + // bool WantMoveMouse; // [BETA-NAV] MousePos has been altered, back-end should reposition mouse on next frame. Set only when 'NavMovesMouse=true'. + get WantMoveMouse(): boolean { return this.native.WantMoveMouse; } set WantMoveMouse(value: boolean) { this.native.WantMoveMouse = value; } + // float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + get Framerate(): number { return this.native.Framerate; } + // int MetricsAllocs; // Number of active memory allocations + // int MetricsRenderVertices; // Vertices output during last call to Render() + // int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + // int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + // ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + get MouseDelta(): Readonly { return this.native.getMouseDelta(); } + + //------------------------------------------------------------------ + // [Internal] ImGui will maintain those fields. Forward compatibility not guaranteed! + //------------------------------------------------------------------ + + // ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + // ImVec2 MouseClickedPos[5]; // Position at time of clicking + // float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + // bool MouseClicked[5]; // Mouse button went from !Down to Down + // bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + // bool MouseReleased[5]; // Mouse button went from Down to !Down + // bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + // float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + public MouseDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 5; } + return this.native.getMouseDownDurationAt(Number(key)); + } + }); + // float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + // ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + // float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + // float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + public KeysDownDuration: number[] = new Proxy([], { + get: (target: number[], key: PropertyKey): number => { + if (key === "length") { return 512; } + return this.native.getKeysDownDurationAt(Number(key)); + } + }); + // float KeysDownDurationPrev[512]; // Previous duration the key has been down + + // IMGUI_API ImGuiIO(); +} + +// Main +// IMGUI_API ImGuiIO& GetIO(); +export function GetIO(): ImGuiIO { return new ImGuiIO(bind.GetIO()); } +// IMGUI_API ImGuiStyle& GetStyle(); +export function GetStyle(): ImGuiStyle { return new ImGuiStyle(bind.GetStyle()); } +// IMGUI_API ImDrawData* GetDrawData(); // same value as passed to your io.RenderDrawListsFn() function. valid after Render() and until the next call to NewFrame() +export function GetDrawData(): ImDrawData | null { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + return (draw_data === null) ? null : new ImDrawData(draw_data); +} +// IMGUI_API void NewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +export function NewFrame(): void { bind.NewFrame(); } +// IMGUI_API void Render(); // ends the ImGui frame, finalize the draw data, then call your io.RenderDrawListsFn() function if set. +export function Render(): void { + bind.Render(); + const io: ImGuiIO = GetIO(); + if (io.RenderDrawListsFn) { + const draw_data: bind.reference_ImDrawData | null = bind.GetDrawData(); + if (draw_data) { + io.RenderDrawListsFn(new ImDrawData(draw_data)); + } + } +} +// IMGUI_API void EndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +export function EndFrame(): void { bind.EndFrame(); } +// IMGUI_API void Shutdown(); +export function Shutdown(): void { bind.Shutdown(); } + +// Demo, Debug, Informations +// IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +export function ShowDemoWindow(p_open: bind.ImScalar | null = null): void { bind.ShowDemoWindow(p_open); } +// IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +export function ShowMetricsWindow(p_open: bind.ImScalar | bind.ImAccess | null = null): void { + if (p_open === null) { + bind.ShowMetricsWindow(null); + } else if (Array.isArray(p_open)) { + bind.ShowMetricsWindow(p_open); + } else { + const ref_open: bind.ImScalar = [ p_open() ]; + const ret = bind.ShowMetricsWindow(ref_open); + p_open(ref_open[0]); + return ret; + } +} +// IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void { + if (ref === null) { + bind.ShowStyleEditor(null); + } else if (ref.internal instanceof bind.ImGuiStyle) { + bind.ShowStyleEditor(ref.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(ref); + bind.ShowStyleEditor(native); + ref.Copy(wrap); + native.delete(); + } +} +// IMGUI_API bool ShowStyleSelector(const char* label); +export function ShowStyleSelector(label: string): boolean { return bind.ShowStyleSelector(label); } +// IMGUI_API void ShowFontSelector(const char* label); +export function ShowFontSelector(label: string): void { bind.ShowFontSelector(label); } +// IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +export function ShowUserGuide(): void { bind.ShowUserGuide(); } + +// Window +// IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // push window to the stack and start appending to it. see .cpp for details. return false when window is collapsed, so you can early out in your code. 'bool* p_open' creates a widget on the upper-right to close the window (which sets your bool to false). +export function Begin(name: string, open: bind.ImScalar | bind.ImAccess | null = null, flags: bind.ImGuiWindowFlags = 0): boolean { + if (open === null) { + return bind.Begin(name, null, flags); + } else if (Array.isArray(open)) { + return bind.Begin(name, open, flags); + } else { + const ref_open: bind.ImScalar = [ open() ]; + const opened: boolean = bind.Begin(name, ref_open, flags); + open(ref_open[0]); + return opened; + } +} +// IMGUI_API void End(); // finish appending to current window, pop it off the window stack. +export { End } from "./bind-imgui"; +// IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). +// IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // " +export function BeginChild(id: string | bind.ImGuiID, size: Readonly = ImVec2.ZERO, border: boolean = false, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChild(id, size, border, extra_flags); +} +// IMGUI_API void EndChild(); +export function EndChild(): void { + bind.EndChild(); +} +// IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +export function GetContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionMax(out); +} +// IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +export function GetContentRegionAvail(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetContentRegionAvail(out); +} +// IMGUI_API float GetContentRegionAvailWidth(); // +export { GetContentRegionAvailWidth } from "./bind-imgui"; +// IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +export function GetWindowContentRegionMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMin(out); +} +// IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +export function GetWindowContentRegionMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowContentRegionMax(out); +} +// IMGUI_API float GetWindowContentRegionWidth(); // +export { GetWindowContentRegionWidth } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives +export function GetWindowDrawList(): ImDrawList { + return new ImDrawList(bind.GetWindowDrawList()); +} +// IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList api) +export function GetWindowPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowPos(out); +} +// IMGUI_API ImVec2 GetWindowSize(); // get current window size +export function GetWindowSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetWindowSize(out); +} +// IMGUI_API float GetWindowWidth(); +export { GetWindowWidth } from "./bind-imgui"; +// IMGUI_API float GetWindowHeight(); +export { GetWindowHeight } from "./bind-imgui"; +// IMGUI_API bool IsWindowCollapsed(); +export { IsWindowCollapsed } from "./bind-imgui"; +// IMGUI_API bool IsWindowAppearing(); +export { IsWindowAppearing } from "./bind-imgui"; +// IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontGlobalScale if you want to scale all windows +export { SetWindowFontScale } from "./bind-imgui"; + +// IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +export function SetNextWindowPos(pos: Readonly, cond: bind.ImGuiCond = 0, pivot: Readonly = ImVec2.ZERO): void { + bind.SetNextWindowPos(pos, cond, pivot); +} +// IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +export function SetNextWindowSize(pos: Readonly, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowSize(pos, cond); +} +// IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +export function SetNextWindowSizeConstraints(size_min: Readonly, size_max: Readonly, custom_callback: ImGuiSizeConstraintCallback | null = null, custom_callback_data: any = null): void { + if (custom_callback) { + function _custom_callback(data: bind.ImGuiSizeConstraintCallbackData): void { + const _data: ImGuiSizeConstraintCallbackData = new ImGuiSizeConstraintCallbackData(data); + custom_callback ? custom_callback(_data) : 0; + _data.delete(); + } + bind.SetNextWindowSizeConstraints(size_min, size_max, _custom_callback, custom_callback_data); + } else { + bind.SetNextWindowSizeConstraints(size_min, size_max, null, null); + } +} +// IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +export function SetNextWindowContentSize(size: Readonly): void { + bind.SetNextWindowContentSize(size); +} +// IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin() +export function SetNextWindowCollapsed(collapsed: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextWindowCollapsed(collapsed, cond); +} +// IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +export { SetNextWindowFocus } from "./bind-imgui"; +// IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +// IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +// IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +// IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +// IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position. +// IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +// IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state +// IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +export function SetWindowPos(name_or_pos: string | Readonly, pos_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_pos) === "string") { + bind.SetWindowNamePos(name_or_pos, pos_or_cond as Readonly, cond); + return; + } else { + bind.SetWindowPos(name_or_pos, pos_or_cond as bind.ImGuiCond); + } +} +export function SetWindowSize(name_or_size: string | Readonly, size_or_cond: Readonly | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_size) === "string") { + bind.SetWindowNamePos(name_or_size, size_or_cond as Readonly, cond); + } else { + bind.SetWindowSize(name_or_size, size_or_cond as bind.ImGuiCond); + } +} +export function SetWindowCollapsed(name_or_collapsed: string | boolean, collapsed_or_cond: boolean | bind.ImGuiCond = 0, cond: bind.ImGuiCond = 0): void { + if (typeof(name_or_collapsed) === "string") { + bind.SetWindowNameCollapsed(name_or_collapsed, collapsed_or_cond as boolean, cond); + } else { + bind.SetWindowCollapsed(name_or_collapsed, collapsed_or_cond as bind.ImGuiCond); + } +} +export function SetWindowFocus(name?: string): void { + if (typeof(name) === "string") { + bind.SetWindowNameFocus(name); + } else { + bind.SetWindowFocus(); + } +} + +// IMGUI_API float GetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +export { GetScrollX } from "./bind-imgui"; +// IMGUI_API float GetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +export { GetScrollY } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +export { GetScrollMaxX } from "./bind-imgui"; +// IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +export { GetScrollMaxY } from "./bind-imgui"; +// IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +export { SetScrollX } from "./bind-imgui"; +// IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +export { SetScrollY } from "./bind-imgui"; +// IMGUI_API void SetScrollHere(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +export function SetScrollHere(center_y_ratio: number = 0.5): void { + bind.SetScrollHere(center_y_ratio); +} +// IMGUI_API void SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +export function SetScrollFromPosY(pos_y: number, center_y_ratio: number = 0.5): void { + bind.SetScrollFromPosY(pos_y, center_y_ratio); +} +// IMGUI_API void SetStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) +// IMGUI_API ImGuiStorage* GetStateStorage(); + +// Parameters stacks (shared) +// IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font +export function PushFont(font: ImFont): void {} +// IMGUI_API void PopFont(); +export function PopFont(): void {} +// IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); +// IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col); +export function PushStyleColor(idx: bind.ImGuiCol, col: bind.ImU32 | Readonly | Readonly): void { + if (col instanceof ImColor) { + bind.PushStyleColor(idx, col.Value); + } else { + bind.PushStyleColor(idx, col as (bind.ImU32 | Readonly)); + } +} +// IMGUI_API void PopStyleColor(int count = 1); +export function PopStyleColor(count: number = 1): void { + bind.PopStyleColor(count); +} +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); +// IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); +export function PushStyleVar(idx: bind.ImGuiStyleVar, val: number | Readonly): void { + bind.PushStyleVar(idx, val); +} +// IMGUI_API void PopStyleVar(int count = 1); +export function PopStyleVar(count: number = 1): void { + bind.PopStyleVar(count); +} +// IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color + style alpha. +export function GetStyleColorVec4(idx: bind.ImGuiCol): Readonly { + return bind.GetStyleColorVec4(idx); +} +// IMGUI_API ImFont* GetFont(); // get current font +export function GetFont(): ImFont { + return new ImFont(bind.GetFont()); +} +// IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +export { GetFontSize } from "./bind-imgui"; +// IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +export function GetFontTexUvWhitePixel(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetFontTexUvWhitePixel(out); +} +// IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier +// IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied +// IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied +export function GetColorU32(idx: bind.ImGuiCol, alpha_mul: number = 1.0): bind.ImU32 { + return bind.GetColorU32(idx, alpha_mul); +} + +// Parameters stacks (current window) +// IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) +export { PushItemWidth } from "./bind-imgui"; +// IMGUI_API void PopItemWidth(); +export { PopItemWidth } from "./bind-imgui"; +// IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position +export { CalcItemWidth } from "./bind-imgui"; +// IMGUI_API void PushTextWrapPos(float wrap_pos_x = 0.0f); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space +export function PushTextWrapPos(wrap_pos_x: number = 0.0): void { + bind.PushTextWrapPos(wrap_pos_x); +} +// IMGUI_API void PopTextWrapPos(); +export { PopTextWrapPos } from "./bind-imgui"; +// IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets +export { PushAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PopAllowKeyboardFocus(); +export { PopAllowKeyboardFocus } from "./bind-imgui"; +// IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. +export { PushButtonRepeat } from "./bind-imgui"; +// IMGUI_API void PopButtonRepeat(); +export { PopButtonRepeat } from "./bind-imgui"; + +// Cursor / Layout +// IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +export { Separator } from "./bind-imgui"; +// IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally +export function SameLine(pos_x: number = 0.0, spacing_w: number = -1.0): void { + bind.SameLine(pos_x, spacing_w); +} +// IMGUI_API void NewLine(); // undo a SameLine() +export { NewLine } from "./bind-imgui"; +// IMGUI_API void Spacing(); // add vertical spacing +export { Spacing } from "./bind-imgui"; +// IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size +export function Dummy(size: Readonly): void { bind.Dummy(size); } +// IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +export function Indent(indent_w: number = 0.0) { bind.Indent(indent_w); } +// IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +export function Unindent(indent_w: number = 0.0) { bind.Unindent(indent_w); } +// IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) +export { BeginGroup } from "./bind-imgui"; +// IMGUI_API void EndGroup(); +export { EndGroup } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position +export function GetCursorPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorPos(out); } +// IMGUI_API float GetCursorPosX(); // " +export { GetCursorPosX } from "./bind-imgui"; +// IMGUI_API float GetCursorPosY(); // " +export { GetCursorPosY } from "./bind-imgui"; +// IMGUI_API void SetCursorPos(const ImVec2& local_pos); // " +export function SetCursorPos(local_pos: Readonly): void { bind.SetCursorPos(local_pos); } +// IMGUI_API void SetCursorPosX(float x); // " +export { SetCursorPosX } from "./bind-imgui"; +// IMGUI_API void SetCursorPosY(float y); // " +export { SetCursorPosY } from "./bind-imgui"; +// IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position +export function GetCursorStartPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorStartPos(out); } +// IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +export function GetCursorScreenPos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { return bind.GetCursorScreenPos(out); } +// IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +export function SetCursorScreenPos(pos: Readonly): void { bind.SetCursorScreenPos(pos); } +// IMGUI_API void AlignTextToFramePadding(); // vertically align/lower upcoming text to FramePadding.y so that it will aligns to upcoming widgets (call if you have text on a line before regular widgets) +export { AlignTextToFramePadding } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeight(); // ~ FontSize +export { GetTextLineHeight } from "./bind-imgui"; +// IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +export { GetTextLineHeightWithSpacing } from "./bind-imgui"; +// IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +export { GetFrameHeight } from "./bind-imgui"; +// IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +export { GetFrameHeightWithSpacing } from "./bind-imgui"; + +// Columns +// You can also use SameLine(pos_x) for simplified columns. The columns API is still work-in-progress and rather lacking. +// IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); +export function Columns(count: number = 1, id: string | null = null, border: boolean = true): void { + id = id || ""; + bind.Columns(count, id, border); +} +// IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished +export { NextColumn } from "./bind-imgui"; +// IMGUI_API int GetColumnIndex(); // get current column index +export { GetColumnIndex } from "./bind-imgui"; +// IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column +export function GetColumnWidth(column_index: number = -1): number { + return bind.GetColumnWidth(column_index); +} +// IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column +export { SetColumnWidth } from "./bind-imgui"; +// IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +export function GetColumnOffset(column_index: number = -1): number { + return bind.GetColumnOffset(column_index); +} +// IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column +export { SetColumnOffset } from "./bind-imgui"; +// IMGUI_API int GetColumnsCount(); +export { GetColumnsCount } from "./bind-imgui"; + +// ID scopes +// If you are creating widgets in a loop you most likely want to push a unique identifier (e.g. object pointer, loop index) so ImGui can differentiate them. +// You can also use the "##foobar" syntax within widget label to distinguish them from each others. Read "A primer on the use of labels/IDs" in the FAQ for more details. +// IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! +// IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API void PushID(const void* ptr_id); +// IMGUI_API void PushID(int int_id); +export { PushID } from "./bind-imgui"; +// IMGUI_API void PopID(); +export { PopID } from "./bind-imgui"; +// IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself +// IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end); +// IMGUI_API ImGuiID GetID(const void* ptr_id); +export { GetID } from "./bind-imgui"; + +// Widgets: Text +// IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +export function TextUnformatted(text: string): void { bind.TextUnformatted(text); } +// IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // simple formatted text +// IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function Text(fmt: string/*, ...args: any[]*/): void { bind.Text(fmt/*, ...args*/); } +// IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2); +export function TextColored(col: Readonly | Readonly, fmt: string/*, ...args: any[]*/): void { + bind.TextColored((col instanceof ImColor) ? col.Value : col as Readonly, fmt/*, ...args*/); +} +// IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); +// IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextDisabled(fmt: string/*, ...args: any[]*/): void { bind.TextDisabled(fmt/*, ...args*/); } +// IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). +// IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1); +export function TextWrapped(fmt: string/*, ...args: any[]*/): void { bind.TextWrapped(fmt/*, ...args*/); } +// IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets +// IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2); +export function LabelText(label: string, fmt: string/*, ...args: any[]*/): void { bind.LabelText(label, fmt/*, ...args*/); } +// IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text() +// IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1); +export function BulletText(fmt: string/*, ...args: any[]*/): void { bind.BulletText(fmt/*, ...args*/); } +// IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses +export { Bullet } from "./bind-imgui"; + +// Widgets: Main +// IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button +export function Button(label: string, size: Readonly = ImVec2.ZERO): boolean { + return bind.Button(label, size); +} +// IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text +export { SmallButton } from "./bind-imgui"; +// IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) +export function InvisibleButton(str_id: string, size: Readonly): boolean { + return bind.InvisibleButton(str_id, size); +} +// IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); +export function Image(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, tint_col: Readonly = ImVec4.WHITE, border_col: Readonly = ImVec4.ZERO): void { + bind.Image(user_texture_id, size, uv0, uv1, tint_col, border_col); +} +// IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding +export function ImageButton(user_texture_id: any, size: Readonly, uv0: Readonly = ImVec2.ZERO, uv1: Readonly = ImVec2.UNIT, frame_padding: number = -1, bg_col: Readonly = ImVec4.ZERO, tint_col: Readonly = ImVec4.WHITE): void { + return bind.ImageButton(user_texture_id, size, uv0, uv1, frame_padding, bg_col, tint_col); +} +// IMGUI_API bool Checkbox(const char* label, bool* v); +export function Checkbox(label: string, v: bind.ImScalar | bind.ImAccess): boolean { + if (Array.isArray(v)) { + return bind.Checkbox(label, v); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.Checkbox(label, ref_v); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); +export function CheckboxFlags(label: string, flags: bind.ImScalar, flags_value: number): boolean { + return bind.CheckboxFlags(label, flags, flags_value); +} +// IMGUI_API bool RadioButton(const char* label, bool active); +// IMGUI_API bool RadioButton(const char* label, int* v, int v_button); +export function RadioButton(label: string, active_or_v: boolean | bind.ImAccess | bind.ImScalar, v_button?: number): boolean { + if (typeof(active_or_v) === "boolean" || Array.isArray(active_or_v)) { + return bind.RadioButton(label, active_or_v, v_button); + } else { + const ref_v: bind.ImScalar = [ active_or_v() ]; + const ret = bind.RadioButton(label, ref_v, v_button); + active_or_v(ref_v[0]); + return ret; + } +} +// IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotLines_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotLines_Callback(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotLines_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotLines(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotLines(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotLines_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); +export function PlotHistogram_Array(label: string, values: ArrayLike, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO, stride: number = 1): void { + function values_getter(data: any, idx: number): number { + return values[idx]; + } + PlotHistogram(label, values_getter, null, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); +export function PlotHistogram_Callback(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + bind.PlotHistogram(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +export function PlotHistogram(label: string, values_getter: (data: any, idx: number) => number, data: any, values_count: number = 0, value_offset: number = 0, overlay_text: string | null = null, scale_min: number | null = null, scale_max: number | null = null, graph_size: Readonly = ImVec2.ZERO): void { + PlotHistogram_Callback(label, values_getter, data, values_count, value_offset, overlay_text, scale_min, scale_max, graph_size); +} +// IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); +export function ProgressBar(fraction: number, size_arg: Readonly = new ImVec2(-1,0), overlay: string | null = null): void { + bind.ProgressBar(fraction, size_arg, overlay); +} + +// Widgets: Combo Box +// The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it. +// The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. +// IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); +export function BeginCombo(label: string, preview_value: string | null, flags: bind.ImGuiComboFlags = 0): boolean { + return bind.BeginCombo(label, preview_value, flags); +} +// IMGUI_API void EndCombo(); +export function EndCombo(): void { bind.EndCombo(); } +// IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); +// IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" +// IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); +function CalcMaxPopupHeightFromItemCount(items_count: number): number { + // ImGuiContext& g = *GImGui; + // const io: ImGuiIO = GetIO(); + const style: ImGuiStyle = GetStyle(); + if (items_count <= 0) + return Number.MAX_VALUE; + // return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2); + return (bind.GetFontSize() + style.ItemSpacing.y) * items_count - style.ItemSpacing.y + (style.WindowPadding.y * 2) +} +export function Combo(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[] | string, items_count: number = items.length, popup_max_height_in_items: number = -1): boolean { + // return bind.Combo(label, current_item, items, items_count, popup_max_height_in_items); + + const _current_item = Array.isArray(current_item) ? current_item : [ current_item() ]; + + if (typeof(items) === "string") { + items = items.replace(/^\0+|\0+$/g, "").split("\0"); + items_count = items.length; + // popup_max_height_in_items = items_count; + } + + // const char* preview_text = NULL; + let preview_text: string = ""; + // if (*current_item >= 0 && *current_item < items_count) + // items_getter(data, *current_item, &preview_text); + if (_current_item[0] >= 0 && _current_item[0] < items_count) + preview_text = items[_current_item[0]]; + + // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. + // if (popup_max_height_in_items != -1 && !g.SetNextWindowSizeConstraint) + // { + // float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + // SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); + // } + if (popup_max_height_in_items != -1 /*&& !g.SetNextWindowSizeConstraint*/) + { + const popup_max_height: number = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); + SetNextWindowSizeConstraints(ImVec2.ZERO, new ImVec2(Number.MAX_VALUE, popup_max_height)); + } + + if (!bind.BeginCombo(label, preview_text, 0)) + return false; + + // Display items + // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed) + let value_changed: boolean = false; + for (let i = 0; i < items_count; i++) + { + bind.PushID(i.toString()); + const item_selected: boolean = (i === _current_item[0]); + // const char* item_text; + const item_text = items[i]; + // if (!items_getter(data, i, &item_text)) + // item_text = "*Unknown item*"; + if (Selectable(item_text, item_selected)) + { + value_changed = true; + _current_item[0] = i; + } + if (item_selected) + bind.SetItemDefaultFocus(); + bind.PopID(); + } + + EndCombo(); + if (!Array.isArray(current_item)) { current_item(_current_item[0]); } + return value_changed; +} +export function Combo_2(label: string, current_item: bind.ImScalar, items: string, popup_max_height_in_items: number = -1): boolean { + return false; +} +export function Combo_3(label: string, current_item: bind.ImScalar, items_getter: (data: any, idx: number, out_text: bind.ImScalar) => boolean, data: any, items_count: number, popup_max_height_in_items: number = -1): boolean { + return false; +} +// export function Combo(label: string, current_item: bind.ImScalar, ...args: any[]): boolean { +// return false; +// } + +// Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) +// For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x +// IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); // If v_min >= v_max we have no bound +export function DragFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string | null = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.DragFloat(label, v, v_speed, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragFloat(label, ref_v, v_speed, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | ImVec2, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec2) { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.DragFloat2(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } else { + return bind.DragFloat2(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.DragFloat3(label, v, v_speed, v_min, v_max, display_format, power); +} +// IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f); +export function DragFloat4(label: string, v: bind.ImTuple4 | ImVec4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", power: number = 1.0): boolean { + if (v instanceof ImVec4) { + const _v: bind.ImTuple4 = [ v.x, v.y, v.z, v.w ]; + const ret = bind.DragFloat4(label, _v, v_speed, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + v.z = _v[2]; + v.w = _v[3]; + return ret; + } else { + return bind.DragFloat4(label, v, v_speed, v_min, v_max, display_format, power); + } +} +// IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", const char* display_format_max = NULL, float power = 1.0f); +export function DragFloatRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0.0, v_max: number = 0.0, display_format: string = "%.3f", display_format_max: string | null = null, power: number = 1.0): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragFloatRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max, power); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; + +} +// IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); // If v_min >= v_max we have no bound +export function DragInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.DragInt(label, v, v_speed, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.DragInt(label, ref_v, v_speed, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt2(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt3(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f"); +export function DragInt4(label: string, v: bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f"): boolean { + return bind.DragInt4(label, v, v_speed, v_min, v_max, display_format); +} +// IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* display_format = "%.0f", const char* display_format_max = NULL); +export function DragIntRange2(label: string, v_current_min: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_current_max: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_speed: number = 1.0, v_min: number = 0, v_max: number = 0, display_format: string = "%.0f", display_format_max: string | null = null): boolean { + const ref_v_current_min: bind.ImScalar = Array.isArray(v_current_min) ? v_current_min as any : [ v_current_min() ]; + const ref_v_current_max: bind.ImScalar = Array.isArray(v_current_max) ? v_current_max as any : [ v_current_max() ]; + const ret = bind.DragIntRange2(label, ref_v_current_min, ref_v_current_max, v_speed, v_min, v_max, display_format, display_format_max); + if (!Array.isArray(v_current_min)) { v_current_min(ref_v_current_min[0]); } + if (!Array.isArray(v_current_max)) { v_current_max(ref_v_current_max[0]); } + return ret; +} + +// Widgets: Input with Keyboard +// IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputText(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputText(label, buf, buf_size, flags, callback === null ? null : _callback, user_data); + }else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputText(label, ref_buf, _buf_size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputText(label, ref_buf, buf_size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiTextEditCallback callback = NULL, void* user_data = NULL); +export function InputTextMultiline(label: string, buf: ImStringBuffer | bind.ImAccess | bind.ImScalar, buf_size: number = buf instanceof ImStringBuffer ? buf.size : ImGuiTextEditDefaultSize, size: Readonly = ImVec2.ZERO, flags: bind.ImGuiInputTextFlags = 0, callback: ImGuiTextEditCallback | null = null, user_data: any = null): boolean { + function _callback(data: bind.ImGuiTextEditCallbackData): number { + const _data: ImGuiTextEditCallbackData = new ImGuiTextEditCallbackData(data); + const ret: number = callback === null ? 0 : callback(_data); + _data.delete(); + return ret; + } + if (Array.isArray(buf)) { + return bind.InputTextMultiline(label, buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + } else if (buf instanceof ImStringBuffer) { + const ref_buf: bind.ImScalar = [ buf.buffer ]; + const _buf_size: number = Math.min(buf_size, buf.size); + let ret: boolean = bind.InputTextMultiline(label, ref_buf, _buf_size, size, flags, callback === null ? null : _callback, user_data); + buf.buffer = ref_buf[0]; + return ret; + } else { + const ref_buf: bind.ImScalar = [ buf() ]; + let ret: boolean = bind.InputTextMultiline(label, ref_buf, buf_size, size, flags, callback === null ? null : _callback, user_data); + buf(ref_buf[0]); + return ret; + } +} +// IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 0.0, step_fast: number = 0.0, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputFloat(label, v, step, step_fast, decimal_precision, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputFloat(label, ref_v, step, step_fast, decimal_precision, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat2(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat3(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0); +export function InputFloat4(label: string, v: bind.ImTuple4, decimal_precision: number = -1, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputFloat4(label, v, decimal_precision, extra_flags); +} +// IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0); +export function InputInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, step: number = 1, step_fast: number = 100, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + if (Array.isArray(v)) { + return bind.InputInt(label, v, step, step_fast, extra_flags); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret = bind.InputInt(label, ref_v, step, step_fast, extra_flags); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags extra_flags = 0); +export function InputInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt2(label, v, extra_flags); +} +// IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags extra_flags = 0); +export function InputInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt3(label, v, extra_flags); +} +// IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags extra_flags = 0); +export function InputInt4(label: string, v: bind.ImTuple4, extra_flags: bind.ImGuiInputTextFlags = 0): boolean { + return bind.InputInt4(label, v, extra_flags); +} + +// Widgets: Sliders (tip: ctrl+click on a slider to input with keyboard. manually input values aren't clamped, can go off-bounds) +// IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders +export function SliderFloat(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat(label, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderFloat(label, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec2, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.SliderFloat2(label, v, v_min, v_max, display_format, power); + } else { + const _v: bind.ImTuple2 = [ v.x, v.y ]; + const ret = bind.SliderFloat2(label, _v, v_min, v_max, display_format, power); + v.x = _v[0]; + v.y = _v[1]; + return ret; + } +} +// IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat3(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function SliderFloat4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + return bind.SliderFloat4(label, v, v_min, v_max, display_format, power); +} +// IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); +export function SliderAngle(label: string, v_rad: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_degrees_min: number = -360.0, v_degrees_max: number = +360.0): boolean { + if (Array.isArray(v_rad)) { + return bind.SliderAngle(label, v_rad, v_degrees_min, v_degrees_max); + } else { + const ref_v_rad: bind.ImScalar = [ v_rad() ]; + const ret: boolean = bind.SliderAngle(label, ref_v_rad, v_degrees_min, v_degrees_max); + v_rad(ref_v_rad[0]); + return ret; + } +} +// IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt(label: string, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.SliderInt(label, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.SliderInt(label, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt2(label: string, v: bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt2(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt3(label: string, v: bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt3(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* display_format = "%.0f"); +export function SliderInt4(label: string, v: bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + return bind.SliderInt4(label, v, v_min, v_max, display_format); +} +// IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); +export function VSliderFloat(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.3f", power: number = 1.0): boolean { + if (Array.isArray(v)) { + return bind.VSliderFloat(label, size, v, v_min, v_max, display_format, power); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderFloat(label, size, ref_v, v_min, v_max, display_format, power); + v(ref_v[0]); + return ret; + } +} +// IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* display_format = "%.0f"); +export function VSliderInt(label: string, size: Readonly, v: bind.ImAccess | bind.ImScalar | bind.ImTuple2 | bind.ImTuple3 | bind.ImTuple4, v_min: number, v_max: number, display_format: string = "%.0f"): boolean { + if (Array.isArray(v)) { + return bind.VSliderInt(label, size, v, v_min, v_max, display_format); + } else { + const ref_v: bind.ImScalar = [ v() ]; + const ret: boolean = bind.VSliderInt(label, size, ref_v, v_min, v_max, display_format); + v(ref_v[0]); + return ret; + } +} + +// Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.) +// Note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can the pass the address of a first float element out of a contiguous structure, e.g. &myvector.x +// IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorEdit3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorEdit3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0); +export function ColorEdit4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorEdit4(label, col, flags); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorEdit4(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0); +export function ColorPicker3(label: string, col: bind.ImTuple3 | bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker3(label, col, flags); + } else { + const _col: bind.ImTuple3 = [ col.x, col.y, col.z ]; + const ret = bind.ColorPicker3(label, _col, flags); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; + return ret; + } +} +// IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL); +export function ColorPicker4(label: string, col: bind.ImTuple4 | bind.interface_ImVec4, flags: bind.ImGuiColorEditFlags = 0, ref_col: bind.ImTuple4 | ImVec4 | null = null): boolean { + if (Array.isArray(col)) { + return bind.ColorPicker4(label, col, flags, ref_col); + } else { + const _col: bind.ImTuple4 = [ col.x, col.y, col.z, col.w ]; + const ret = bind.ColorPicker4(label, _col, flags, ref_col); + col.x = _col[0]; col.y = _col[1]; col.z = _col[2]; col.w = _col[3]; + return ret; + } +} +// IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0)); // display a colored square/button, hover for details, return true when pressed. +export function ColorButton(desc_id: string, col: Readonly, flags: bind.ImGuiColorEditFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + return bind.ColorButton(desc_id, col, flags, size); +} +// IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +export function SetColorEditOptions(flags: bind.ImGuiColorEditFlags): void { + bind.SetColorEditOptions(flags); +} + +// Widgets: Trees +// IMGUI_API bool TreeNode(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +// IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +// IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // " +// IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2); +// IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2); +export function TreeNode(label_or_id: string | number, fmt?: string): boolean { + return bind.TreeNode(label_or_id, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0); +// IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3); +// IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +// IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3); +export function TreeNodeEx(label_or_id: string | number, flags: bind.ImGuiTreeNodeFlags = 0, fmt?: string): boolean { + return bind.TreeNodeEx(label_or_id, flags, fmt || ((typeof(label_or_id) === "string") ? label_or_id : "")); +} +// IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +// IMGUI_API void TreePush(const void* ptr_id = NULL); // " +export { TreePush } from "./bind-imgui"; +// IMGUI_API void TreePop(); // ~ Unindent()+PopId() +export { TreePop } from "./bind-imgui"; +// IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +export { TreeAdvanceToLabelPos } from "./bind-imgui"; +// IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +export { GetTreeNodeToLabelSpacing } from "./bind-imgui"; +// IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state. +export function SetNextTreeNodeOpen(is_open: boolean, cond: bind.ImGuiCond = 0): void { + bind.SetNextTreeNodeOpen(is_open, cond); +} +// IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +// IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +export function CollapsingHeader(label: string, flags_or_p_open: bind.ImGuiTreeNodeFlags | bind.ImScalar | bind.ImAccess = 0, flags: bind.ImGuiTreeNodeFlags = 0): boolean { + if (Array.isArray(flags_or_p_open)) { + return bind.CollapsingHeader(label, flags_or_p_open, flags); + } else if (typeof(flags_or_p_open) === "number") { + return bind.CollapsingHeader(label, null, flags_or_p_open); + } else { + const ref_open: bind.ImScalar = [ flags_or_p_open() ]; + const ret = bind.CollapsingHeader(label, ref_open, flags); + flags_or_p_open(ref_open[0]); + return ret; + } +} + +// Widgets: Selectable / Lists +// IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); // size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +// IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0)); +export function Selectable(label: string, selected: boolean | bind.ImScalar | bind.ImAccess = false, flags: bind.ImGuiSelectableFlags = 0, size: Readonly = ImVec2.ZERO): boolean { + if (typeof(selected) === "boolean" || Array.isArray(selected)) { + return bind.Selectable(label, selected, flags, size); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.Selectable(label, ref_selected, flags, size); + selected(ref_selected[0]); + return ret; + } +} +// IMGUI_API bool ListBox(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); +// IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); +export function ListBox(label: string, current_item: bind.ImAccess | bind.ImScalar, items: string[], items_count: number = items.length, height_in_items: number = -1): boolean { + if (Array.isArray(current_item)) { + return bind.ListBox(label, current_item, items, items_count, height_in_items); + } else { + const ref_current_item: bind.ImScalar = [ current_item() ]; + const ret = bind.ListBox(label, ref_current_item, items, items_count, height_in_items); + current_item(ref_current_item[0]); + return ret; + } +} +// IMGUI_API bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +// IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // " +export function ListBoxHeader(label: string, size: Readonly): boolean { + return bind.ListBoxHeader(label, size); +} +// IMGUI_API void ListBoxFooter(); // terminate the scrolling region +export function ListBoxFooter(): void { + bind.ListBoxFooter(); +} + +// Widgets: Value() Helpers. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace) +// IMGUI_API void Value(const char* prefix, bool b); +// IMGUI_API void Value(const char* prefix, int v); +// IMGUI_API void Value(const char* prefix, unsigned int v); +// IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL); +export function Value(prefix: string, ...args: any[]): void { +} + +// Tooltips +// IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). +// IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1); +export function SetTooltip(fmt: string): void { + bind.SetTooltip(fmt); +} +// IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). +export { BeginTooltip } from "./bind-imgui"; +// IMGUI_API void EndTooltip(); +export { EndTooltip } from "./bind-imgui"; + +// Menus +// IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar. only call EndMainMenuBar() if this returns true! +export { BeginMainMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMainMenuBar(); +export { EndMainMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). only call EndMenuBar() if this returns true! +export { BeginMenuBar } from "./bind-imgui"; +// IMGUI_API void EndMenuBar(); +export { EndMenuBar } from "./bind-imgui"; +// IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true! +export function BeginMenu(label: string, enabled: boolean = true): boolean { return bind.BeginMenu(label, enabled); } +// IMGUI_API void EndMenu(); +export { EndMenu } from "./bind-imgui"; +// IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +// IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL +export function MenuItem(label: string, shortcut: string | null = null, selected: boolean | bind.ImScalar | bind.ImAccess = false, enabled: boolean = true): boolean { + if (shortcut === null) { shortcut = ""; } + if (typeof(selected) === "boolean") { + selected = [ selected ]; + return bind.MenuItem(label, shortcut, selected, enabled); + } else if (Array.isArray(selected)) { + return bind.MenuItem(label, shortcut, selected, enabled); + } else { + const ref_selected: bind.ImScalar = [ selected() ]; + const ret = bind.MenuItem(label, shortcut, ref_selected, enabled); + selected(ref_selected[0]); + return ret; + } +} + +// Popups +// IMGUI_API void OpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +export { OpenPopup } from "./bind-imgui"; +// IMGUI_API bool OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1); // helper to open popup when clicked on last item. return true when just opened. +export function OpenPopupOnItemClick(str_id: string = "", mouse_button: number = 1): boolean { + return bind.OpenPopupOnItemClick(str_id, mouse_button); +} +// IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true! +export { BeginPopup } from "./bind-imgui"; +// IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside) +export function BeginPopupModal(str_id: string = "", p_open: bind.ImScalar | null = null, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + p_open = p_open || [ true ]; + return bind.BeginPopupModal(str_id, p_open, extra_flags); +} +// IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +export function BeginPopupContextItem(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextItem(str_id, mouse_button); +} +// IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, int mouse_button = 1, bool also_over_items = true); // helper to open and begin popup when clicked on current window. +export function BeginPopupContextWindow(str_id: string = "", mouse_button: number = 1, also_over_items: boolean = true): boolean { + return bind.BeginPopupContextWindow(str_id, mouse_button, also_over_items); +} +// IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (where there are no imgui windows). +export function BeginPopupContextVoid(str_id: string = "", mouse_button: number = 1): boolean { + return bind.BeginPopupContextVoid(str_id, mouse_button); +} +// IMGUI_API void EndPopup(); +export { EndPopup } from "./bind-imgui"; +// IMGUI_API bool IsPopupOpen(const char* str_id); // return true if the popup is open +export { IsPopupOpen } from "./bind-imgui"; +// IMGUI_API void CloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. +export { CloseCurrentPopup } from "./bind-imgui"; + +// Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. +// IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty +export function LogToTTY(max_depth: number = -1): void { + bind.LogToTTY(max_depth); +} +// IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file +export function LogToFile(max_depth: number = -1, filename: string | null = null): void { + bind.LogToFile(max_depth, filename); +} +// IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard +export function LogToClipboard(max_depth: number = -1): void { + bind.LogToClipboard(max_depth); +} +// IMGUI_API void LogFinish(); // stop logging (close file, etc.) +export { LogFinish } from "./bind-imgui"; +// IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard +export { LogButtons } from "./bind-imgui"; +// IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed) +export function LogText(fmt: string): void { + bind.LogText(fmt); +} + +// Drag and Drop +// [BETA API] Missing Demo code. API may evolve. +// IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0, int mouse_button = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +export function BeginDragDropSource(flags: bind.ImGuiDragDropFlags = 0, mouse_button: number = 0): boolean { + return false; +} +// IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 8 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +export function SetDragDropPayload(type: string, data: any, size: number, cond: bind.ImGuiCond = 0): boolean { + return false; +} +// IMGUI_API void EndDragDropSource(); +export function EndDragDropSource(): void { +} +// IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +export function BeginDragDropTarget(): boolean { + return false; +} +// IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +export function AcceptDragDropPayload(type: string, flags: bind.ImGuiDragDropFlags = 0): any { + return null; +} +// IMGUI_API void EndDragDropTarget(); +export function EndDragDropTarget(): void { +} + +// Clipping +// IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect); +export function PushClipRect(clip_rect_min: Readonly, clip_rect_max: Readonly, intersect_with_current_clip_rect: boolean): void { + bind.PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect); +} +// IMGUI_API void PopClipRect(); +export function PopClipRect(): void { + bind.PopClipRect(); +} + +// Styles +// IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); +export function StyleColorsClassic(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsClassic(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsClassic(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsClassic(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); +export function StyleColorsDark(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsDark(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsDark(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsDark(native); + dst.Copy(wrap); + native.delete(); + } +} +// IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); +export function StyleColorsLight(dst: ImGuiStyle | null = null): void { + if (dst === null) { + bind.StyleColorsLight(null); + } else if (dst.internal instanceof bind.ImGuiStyle) { + bind.StyleColorsLight(dst.internal); + } else { + const native = new bind.ImGuiStyle(); + const wrap = new ImGuiStyle(native); + wrap.Copy(dst); + bind.StyleColorsLight(native); + dst.Copy(wrap); + native.delete(); + } +} + +// Focus +// (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) +// (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) +// IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). +export { SetItemDefaultFocus } from "./bind-imgui"; +// IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +export function SetKeyboardFocusHere(offset: number = 0): void { + bind.SetKeyboardFocusHere(offset); +} + +// Utilities +// IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +export function IsItemHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsItemHovered(flags); +} +// IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +export { IsItemActive } from "./bind-imgui"; +// IMGUI_API bool IsItemClicked(int mouse_button = 0); // is the last item clicked? (e.g. button/node just clicked on) +export function IsItemClicked(mouse_button: number = 0): boolean { + return bind.IsItemClicked(mouse_button); +} +// IMGUI_API bool IsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) +export { IsItemVisible } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemHovered(); +export { IsAnyItemHovered } from "./bind-imgui"; +// IMGUI_API bool IsAnyItemActive(); +export { IsAnyItemActive } from "./bind-imgui"; +// IMGUI_API ImVec2 GetItemRectMin(); // get bounding rectangle of last item, in screen space +export function GetItemRectMin(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMin(out); +} +// IMGUI_API ImVec2 GetItemRectMax(); // " +export function GetItemRectMax(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectMax(out); +} +// IMGUI_API ImVec2 GetItemRectSize(); // get size of last item, in screen space +export function GetItemRectSize(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetItemRectSize(out); +} +// IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +export { SetItemAllowOverlap } from "./bind-imgui"; +// IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags = 0); // is current window focused? or its root/child, depending on flags. see flags for options. +export function IsWindowFocused(flags: bind.ImGuiFocusedFlags = 0): boolean { + return bind.IsWindowFocused(flags); +} +// IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags = 0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. +export function IsWindowHovered(flags: bind.ImGuiHoveredFlags = 0): boolean { + return bind.IsWindowHovered(flags); +} +// IMGUI_API bool IsAnyWindowFocused(); +export { IsAnyWindowFocused } from "./bind-imgui"; +// IMGUI_API bool IsAnyWindowHovered(); // is mouse hovering any visible window +export { IsAnyWindowHovered } from "./bind-imgui"; +// IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +// IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. +export function IsRectVisible(size_or_rect_min: Readonly, rect_max?: Readonly): boolean { + return bind.IsRectVisible(size_or_rect_min, rect_max); +} +// IMGUI_API float GetTime(); +export { GetTime } from "./bind-imgui"; +// IMGUI_API int GetFrameCount(); +export { GetFrameCount } from "./bind-imgui"; +// IMGUI_API ImDrawList* GetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +export function GetOverlayDrawList(): ImDrawList { + return new ImDrawList(bind.GetOverlayDrawList()); +} +// IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); +export function GetDrawListSharedData(): ImDrawListSharedData { + return new ImDrawListSharedData(bind.GetDrawListSharedData()); +} +// IMGUI_API const char* GetStyleColorName(ImGuiCol idx); +export { GetStyleColorName } from "./bind-imgui"; +// IMGUI_API ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f); // utility to find the closest point the last item bounding rectangle edge. useful to visually link items +export function CalcItemRectClosestPoint(pos: Readonly, on_edge: boolean = false, outward: number = +0.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcItemRectClosestPoint(pos, on_edge, outward, out); +} +// IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); +export function CalcTextSize(text: string, text_end: string | null = null, hide_text_after_double_hash: boolean = false, wrap_width: number = -1, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.CalcTextSize(text, text_end, hide_text_after_double_hash, wrap_width, out); +} +// IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +export function CalcListClipping(items_count: number, items_height: number, out_items_display_start: bind.ImScalar, out_items_display_end: bind.ImScalar): void { + return bind.CalcListClipping(items_count, items_height, out_items_display_start, out_items_display_end); +} + +// IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame +export function BeginChildFrame(id: bind.ImGuiID, size: Readonly, extra_flags: bind.ImGuiWindowFlags = 0): boolean { + return bind.BeginChildFrame(id, size, extra_flags); +} +// IMGUI_API void EndChildFrame(); +export { EndChildFrame } from "./bind-imgui"; + +// IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in); +export function ColorConvertU32ToFloat4(in_: bind.ImU32, out: bind.interface_ImVec4 = new ImVec4()): typeof out { + return bind.ColorConvertU32ToFloat4(in_, out); +} +// IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in); +export function ColorConvertFloat4ToU32(in_: Readonly): bind.ImU32 { + return bind.ColorConvertFloat4ToU32(in_); +} +// IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v); +export { ColorConvertRGBtoHSV } from "./bind-imgui"; +// IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b); +export { ColorConvertHSVtoRGB } from "./bind-imgui"; + +// Inputs +// IMGUI_API int GetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +export function GetKeyIndex(imgui_key: bind.ImGuiKey): number { + return bind.GetKeyIndex(imgui_key); +} +// IMGUI_API bool IsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +export function IsKeyDown(user_key_index: number): boolean { + return bind.IsKeyDown(user_key_index); +} +// IMGUI_API bool IsKeyPressed(int user_key_index, bool repeat = true); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +export function IsKeyPressed(user_key_index: number, repeat: boolean = true): boolean { + return bind.IsKeyPressed(user_key_index, repeat); +} +// IMGUI_API bool IsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +export function IsKeyReleased(user_key_index: number): boolean { + return bind.IsKeyReleased(user_key_index); +} +// IMGUI_API int GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +export function GetKeyPressedAmount(user_key_index: number, repeat_delay: number, rate: number): number { + return bind.GetKeyPressedAmount(user_key_index, repeat_delay, rate); +} +// IMGUI_API bool IsMouseDown(int button); // is mouse button held +export function IsMouseDown(button: number): boolean { + return bind.IsMouseDown(button); +} +// IMGUI_API bool IsMouseClicked(int button, bool repeat = false); // did mouse button clicked (went from !Down to Down) +export function IsMouseClicked(button: number, repeat: boolean = false): boolean { + return bind.IsMouseClicked(button, repeat); +} +// IMGUI_API bool IsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +export function IsMouseDoubleClicked(button: number): boolean { + return bind.IsMouseDoubleClicked(button); +} +// IMGUI_API bool IsMouseReleased(int button); // did mouse button released (went from Down to !Down) +export function IsMouseReleased(button: number): boolean { + return bind.IsMouseReleased(button); +} +// IMGUI_API bool IsMouseDragging(int button = 0, float lock_threshold = -1.0f); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function IsMouseDragging(button: number = 0, lock_threshold: number = -1.0): boolean { + return bind.IsMouseDragging(button, lock_threshold); +} +// IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +export function IsMouseHoveringRect(r_min: Readonly, r_max: Readonly, clip: boolean = true): boolean { + return bind.IsMouseHoveringRect(r_min, r_max, clip); +} +// IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // +export function IsMousePosValid(mouse_pos: Readonly | null = null): boolean { + return bind.IsMousePosValid(mouse_pos); +} +// IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +export function GetMousePos(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePos(out); +} +// IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse positioning at the time of opening popup we have BeginPopup() into +export function GetMousePosOnOpeningCurrentPopup(out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMousePosOnOpeningCurrentPopup(out); +} +// IMGUI_API ImVec2 GetMouseDragDelta(int button = 0, float lock_threshold = -1.0f); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +export function GetMouseDragDelta(button: number = 0, lock_threshold: number = -1.0, out: bind.interface_ImVec2 = new ImVec2()): typeof out { + return bind.GetMouseDragDelta(button, lock_threshold, out); +} +// IMGUI_API void ResetMouseDragDelta(int button = 0); // +export function ResetMouseDragDelta(button: number = 0): void { + bind.ResetMouseDragDelta(button); +} +// IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +export { GetMouseCursor } from "./bind-imgui"; +// IMGUI_API void SetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +export { SetMouseCursor } from "./bind-imgui"; +// IMGUI_API void CaptureKeyboardFromApp(bool capture = true); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application handle). e.g. force capture keyboard when your widget is being hovered. +export function CaptureKeyboardFromApp(capture: boolean = true) { + return bind.CaptureKeyboardFromApp(capture); +} +// IMGUI_API void CaptureMouseFromApp(bool capture = true); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application handle). +export function CaptureMouseFromApp(capture: boolean = true): void { + bind.CaptureMouseFromApp(capture); +} + +// Helpers functions to access functions pointers in ImGui::GetIO() +// IMGUI_API void* MemAlloc(size_t sz); +export { MemAlloc } from "./bind-imgui"; +// IMGUI_API void MemFree(void* ptr); +export { MemFree } from "./bind-imgui"; +// IMGUI_API const char* GetClipboardText(); +export { GetClipboardText } from "./bind-imgui"; +// IMGUI_API void SetClipboardText(const char* text); +export { SetClipboardText } from "./bind-imgui"; + +// Internal context access - if you want to use multiple context, share context between modules (e.g. DLL). There is a default context created and active by default. +// All contexts share a same ImFontAtlas by default. If you want different font atlas, you can new() them and overwrite the GetIO().Fonts variable of an ImGui context. +// IMGUI_API const char* GetVersion(); +export { GetVersion } from "./bind-imgui"; +// IMGUI_API ImGuiContext* CreateContext(void* (*malloc_fn)(size_t) = NULL, void (*free_fn)(void*) = NULL); +// export function CreateContext(malloc_fn: ((sz: number) => any) | null = null, free_fn: ((ptr: any) => void) | null = null): bind.ImGuiContext | null { +// return bind.CreateContext(malloc_fn, free_fn); +// } +export function CreateContext(): bind.ImGuiContext | null { + return bind.CreateContext(); +} +// IMGUI_API void DestroyContext(ImGuiContext* ctx); +// export { DestroyContext } from "./bind-imgui"; +export function DestroyContext(ctx: bind.ImGuiContext | null = null): void { + return bind.DestroyContext(ctx); +} +// IMGUI_API ImGuiContext* GetCurrentContext(); +export { GetCurrentContext } from "./bind-imgui"; +// IMGUI_API void SetCurrentContext(ImGuiContext* ctx); +export { SetCurrentContext } from "./bind-imgui"; diff --git a/imgui_demo.js b/imgui_demo.js new file mode 100644 index 0000000..eadc4c6 --- /dev/null +++ b/imgui_demo.js @@ -0,0 +1,2957 @@ +"use strict"; +// dear imgui, v1.53 +// (demo code) +Object.defineProperty(exports, "__esModule", { value: true }); +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +const imgui_4 = require("./imgui"); +const imgui_5 = require("./imgui"); +const imgui_6 = require("./imgui"); +const imgui_7 = require("./imgui"); +const imgui_8 = require("./imgui"); +const imgui_9 = require("./imgui"); +const imgui_10 = require("./imgui"); +const imgui_11 = require("./imgui"); +const imgui_12 = require("./imgui"); +const imgui_13 = require("./imgui"); +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE = "\n"; +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A, _B) { return ((_A) >= (_B)) ? (_A) : (_B); } +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) +class Static { + constructor(value) { + this.value = value; + } +} +const _static = {}; +function STATIC(key, value) { + return _static[key] || (_static[key] = new Static(value)); +} +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); +function ShowHelpMarker(desc) { + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} +function ShowUserGuide() { + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} +exports.ShowUserGuide = ShowUserGuide; +// Demonstrate most ImGui features (big function!) +function ShowDemoWindow(p_open = null) { + // Examples apps + /* static */ const show_app_main_menu_bar = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console = STATIC("show_app_console", false); + /* static */ const show_app_log = STATIC("show_app_log", false); + /* static */ const show_app_layout = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor = STATIC("show_app_style_editor", false); + /* static */ const show_app_metrics = STATIC("show_app_metrics", false); + /* static */ const show_app_about = STATIC("show_app_about", false); + if (show_app_main_menu_bar.value) + ShowExampleAppMainMenuBar(); + if (show_app_console.value) + ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) + ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) + ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) + ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) + ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) + ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) + ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) + ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) + ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) + ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + if (show_app_metrics.value) { + ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); + } + if (show_app_style_editor.value) { + ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ + ShowStyleEditor(); + ImGui.End(); + } + if (show_app_about.value) { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, 64 /* AlwaysAutoResize */); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + /* static */ const no_titlebar = STATIC("no_titlebar", false); + /* static */ const no_scrollbar = STATIC("no_scrollbar", false); + /* static */ const no_menu = STATIC("no_menu", false); + /* static */ const no_move = STATIC("no_move", false); + /* static */ const no_resize = STATIC("no_resize", false); + /* static */ const no_collapse = STATIC("no_collapse", false); + /* static */ const no_close = STATIC("no_close", false); + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags = 0; + if (no_titlebar.value) + window_flags |= 1 /* NoTitleBar */; + if (no_scrollbar.value) + window_flags |= 8 /* NoScrollbar */; + if (!no_menu.value) + window_flags |= 1024 /* MenuBar */; + if (no_move.value) + window_flags |= 4 /* NoMove */; + if (no_resize.value) + window_flags |= 2 /* NoResize */; + if (no_collapse.value) + window_flags |= 32 /* NoCollapse */; + if (no_close.value) + p_open = null; // Don't pass our bool* to Begin + ImGui.SetNextWindowSize(new imgui_6.ImVec2(550, 680), 4 /* FirstUseEver */); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + ImGui.Text(`dear imgui says hello. (${imgui_1.IMGUI_VERSION})`); + // Menu + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("Menu")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ ShowUserGuide(); + } + if (ImGui.CollapsingHeader("Window options")) { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); + ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); + ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + if (ImGui.TreeNode("Style")) { + /*ImGui.*/ ShowStyleEditor(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Capture/Logging")) { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Widgets")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const clicked = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + /* static */ const check = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + /* static */ const e = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); + ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(i / 7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr = STATIC("arr_", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + ImGui.Separator(); + ImGui.LabelText("label", "Value"); + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1 = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + // General BeginCombo() API, you have full control over your selection data and display type + const items = ["AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS"]; + /* static */ const current_item_2 = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) { + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(items); n++) { + const is_selected = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + { + /* static */ const str0 = STATIC("str0", new imgui_4.ImStringBuffer(128, "Hello, world!")); + /* static */ const i0 = STATIC("i0", 123); + /* static */ const f0 = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, imgui_3.IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); + ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); + ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + /* static */ const vec4a = STATIC("vec4a", [0.10, 0.20, 0.30, 0.44]); + ImGui.InputFloat3("input float3", vec4a.value); + } + { + /* static */ const i1 = STATIC("i1#415", 50), i2 = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); + ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + /* static */ const f1 = STATIC("f1#421", 1.00), f2 = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + { + /* static */ const i1 = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); + ShowHelpMarker("CTRL+click to input value."); + /* static */ const f1 = STATIC("f1#427", 0.123), f2 = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + /* static */ const col1 = STATIC("col1", [1.0, 0.0, 0.2]); + /* static */ const col2 = STATIC("col2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit4("color 2", col2.value); + const listbox_items = ["Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon"]; + /* static */ const listbox_item_current = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + /* static */ const listbox_item_current2 = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, imgui_3.IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Trees")) { + if (ImGui.TreeNode("Basic trees")) { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) + console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Advanced, with Selectable nodes")) { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + /* static */ const selection_mask = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(14 /* IndentSpacing */, ImGui.GetFontSize() * 3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags = 128 /* OpenOnArrow */ | 64 /* OpenOnDoubleClick */ | ((selection_mask.value & (1 << i)) ? 1 /* Selected */ : 0); + if (i < 3) { + // Node + const node_open = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= 256 /* Leaf */ | 8 /* NoTreePushOnOpen */; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Collapsing Headers")) { + /* static */ const closable_group = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Bullets")) { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); + ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); + ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text")) { + if (ImGui.TreeNode("Colored Text")) { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new imgui_7.ImVec4(1.0, 0.0, 1.0, 1.0), "Pink"); + ImGui.TextColored(new imgui_7.ImVec4(1.0, 1.0, 0.0, 1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); + ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Word Wrapping")) { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + /* static */ const wrap_width = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + ImGui.Text("Test paragraph 1:"); + let pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new imgui_6.ImVec2(pos.x + wrap_width.value, pos.y), new imgui_6.ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), imgui_8.IM_COL32(255, 0, 255, 255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), imgui_8.IM_COL32(255, 255, 0, 255)); + ImGui.PopTextWrapPos(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("UTF-8 Text")) { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf = STATIC("buf", new imgui_4.ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Images")) { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io = ImGui.GetIO(); + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id = io.Fonts.TexID; + const my_tex_w = io.Fonts.TexWidth; + const my_tex_h = io.Fonts.TexHeight; + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(my_tex_w, my_tex_h), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + if (ImGui.IsItemHovered()) { + ImGui.BeginTooltip(); + const focus_sz = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; + if (focus_x < 0.0) + focus_x = 0.0; + else if (focus_x > my_tex_w - focus_sz) + focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; + if (focus_y < 0.0) + focus_y = 0.0; + else if (focus_y > my_tex_h - focus_sz) + focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0 = new imgui_6.ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1 = new imgui_6.ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new imgui_6.ImVec2(128, 128), uv0, uv1, new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0), new imgui_7.ImVec4(1.0, 1.0, 1.0, 0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); + let frame_padding = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new imgui_6.ImVec2(32, 32), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(32.0 / my_tex_w, 32 / my_tex_h), frame_padding, new imgui_7.ImVec4(0, 0, 0, 1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Selectables")) { + if (ImGui.TreeNode("Basic")) { + /* static */ const selected = STATIC("selected#672", [false, true, false, false]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], 4 /* AllowDoubleClick */)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) { + /* static */ const selected = STATIC("selected#687", [false, false, false]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); + ImGui.SameLine(300); + ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); + ImGui.SameLine(300); + ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) { + ImGui.Columns(3, null, false); + /* static */ const selected = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) { + const label = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) { + /* static */ const selected = STATIC("selected#712", [true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true]); + for (let i = 0; i < 16; i++) { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new imgui_6.ImVec2(50, 50))) { + let x = i % 4, y = i / 4; + if (x > 0) + selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) + selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) + selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) + selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) + ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Filtered Text Input")) { + /* static */ const buf1 = STATIC("buf1", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("default", buf1.value, imgui_3.IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2 = STATIC("buf2", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("decimal", buf2.value, imgui_3.IM_ARRAYSIZE(buf2.value), 1 /* CharsDecimal */); + /* static */ const buf3 = STATIC("buf3", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("hexadecimal", buf3.value, imgui_3.IM_ARRAYSIZE(buf3.value), 2 /* CharsHexadecimal */ | 4 /* CharsUppercase */); + /* static */ const buf4 = STATIC("buf4", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("uppercase", buf4.value, imgui_3.IM_ARRAYSIZE(buf4.value), 4 /* CharsUppercase */); + /* static */ const buf5 = STATIC("buf5", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("no blank", buf5.value, imgui_3.IM_ARRAYSIZE(buf5.value), 8 /* CharsNoBlank */); + class TextFilters { + static FilterImGuiLetters(data) { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) + return 0; return 1; } + } + /* static */ const buf6 = STATIC("buf6", new imgui_4.ImStringBuffer(64, "")); + ImGui.InputText("\"imgui\" letters", buf6.value, imgui_3.IM_ARRAYSIZE(buf6.value), 512 /* CallbackCharFilter */, TextFilters.FilterImGuiLetters); + ImGui.Text("Password input"); + /* static */ const bufpass = STATIC("bufpass", new imgui_4.ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 32768 /* Password */ | 8 /* CharsNoBlank */); + ImGui.SameLine(); + ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, imgui_3.IM_ARRAYSIZE(bufpass.value), 8 /* CharsNoBlank */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-line Text Input")) { + /* static */ const read_only = STATIC("read_only", false); + /* static */ const text = STATIC("text", new imgui_4.ImStringBuffer(1024 * 16, "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, imgui_3.IM_ARRAYSIZE(text.value), new imgui_6.ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), 1024 /* AllowTabInput */ | (read_only.value ? 16384 /* ReadOnly */ : 0)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Plots widgets")) { + /* static */ const animate = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + /* static */ const arr = STATIC("arr", [0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2]); + ImGui.PlotLines_Array("Frame Times", arr.value, imgui_3.IM_ARRAYSIZE(arr.value)); + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset = STATIC("values_offset", 0); + /* static */ const refresh_time = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) { + /* static */ const phase = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value + 1) % imgui_3.IM_ARRAYSIZE(values.value); + phase.value += 0.10 * values_offset.value; + refresh_time.value += 1.0 / 60.0; + } + ImGui.PlotLines_Array("Lines", values.value, imgui_3.IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, imgui_3.IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new imgui_6.ImVec2(0, 80)); + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs { + static Sin(data, i) { return Math.sin(i * 0.1); } + static Saw(data, i) { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type = STATIC("func_type", 0), display_count = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); + ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new imgui_6.ImVec2(0, 80)); + ImGui.Separator(); + // Animate a simple progress bar + /* static */ const progress = STATIC("progress", 0.0), progress_dir = STATIC("progress_dir", 1.0); + if (animate.value) { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { + progress.value = +1.1; + progress_dir.value *= -1.0; + } + if (progress.value <= -0.1) { + progress.value = -0.1; + progress_dir.value *= -1.0; + } + } + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0.0, 0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + const progress_saturated = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf = `${(progress_saturated * 1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new imgui_6.ImVec2(0., 0.), buf); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Color/Picker Widgets")) { + /* static */ const color = STATIC("color#863", new imgui_9.ImColor(114, 144, 154, 200).toImVec4()); + /* static */ const hdr = STATIC("hdr", false); + /* static */ const alpha_preview = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview = STATIC("alpha_half_preview", false); + /* static */ const options_menu = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); + ImGui.SameLine(); + ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); + ImGui.SameLine(); + ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags = (hdr.value ? 4096 /* HDR */ : 0) | (alpha_half_preview.value ? 2048 /* AlphaPreviewHalf */ : (alpha_preview.value ? 1024 /* AlphaPreview */ : 0)) | (options_menu.value ? 0 : 8 /* NoOptions */); + ImGui.Text("Color widget:"); + ImGui.SameLine(); + ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, 16384 /* HSV */ | misc_flags); + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, 131072 /* Float */ | misc_flags); + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); + ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, 32 /* NoInputs */ | 128 /* NoLabel */ | misc_flags); + ImGui.Text("Color button with Custom Picker Popup:"); + // Generate a dummy palette + /* static */ const saved_palette_inited = STATIC("saved_palette_inited", false); + /* static */ const saved_palette = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) { + saved_palette.value[n] = new imgui_7.ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r = [0.0]; + const g = [0.0]; + const b = [0.0]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + /* static */ const backup_color = STATIC("backup_color", new imgui_7.ImVec4()); + let open_popup = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | 256 /* NoSidePreview */ | 16 /* NoSmallPreview */); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, 4 /* NoPicker */ | 2048 /* AlphaPreviewHalf */, new imgui_6.ImVec2(60, 40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < imgui_3.IM_ARRAYSIZE(saved_palette.value); n++) { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], 2 /* NoAlpha */ | 4 /* NoPicker */ | 64 /* NoTooltip */, new imgui_6.ImVec2(20, 20))) + color.value.Copy(new imgui_7.ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + if (ImGui.BeginDragDropTarget()) { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new imgui_6.ImVec2(80, 80)); + ImGui.Text("Color picker:"); + /* static */ const alpha = STATIC("alpha", true); + /* static */ const alpha_bar = STATIC("alpha_bar", true); + /* static */ const side_preview = STATIC("side_preview", true); + /* static */ const ref_color = STATIC("ref_color", false); + /* static */ const ref_color_v = STATIC("ref_color_v", new imgui_7.ImVec4(1.0, 0.0, 1.0, 0.5)); + /* static */ const inputs_mode = STATIC("inputs_mode", 2); + /* static */ const picker_mode = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, 32 /* NoInputs */ | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); + ShowHelpMarker("User can right-click the picker to change mode."); + let flags = misc_flags; + if (!alpha.value) + flags |= 2 /* NoAlpha */; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) + flags |= 512 /* AlphaBar */; + if (!side_preview.value) + flags |= 256 /* NoSidePreview */; + if (picker_mode.value === 1) + flags |= 262144 /* PickerHueBar */; + if (picker_mode.value === 2) + flags |= 524288 /* PickerHueWheel */; + if (inputs_mode.value === 1) + flags |= 32 /* NoInputs */; + if (inputs_mode.value === 2) + flags |= 8192 /* RGB */; + if (inputs_mode.value === 3) + flags |= 16384 /* HSV */; + if (inputs_mode.value === 4) + flags |= 32768 /* HEX */; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); + ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(65536 /* Uint8 */ | 16384 /* HSV */); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(131072 /* Float */ | 8192 /* RGB */); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Range Widgets")) { + /* static */ const begin = STATIC("begin", 10), end = STATIC("end", 90); + /* static */ const begin_i = STATIC("begin_i", 100), end_i = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Multi-component Widgets")) { + /* static */ const vec4f = STATIC("vec4f", [0.10, 0.20, 0.30, 0.44]); + /* static */ const vec4i = STATIC("vec4i", [1, 5, 100, 255]); + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Vertical Sliders")) { + const spacing = 4; + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(spacing, spacing)); + /* static */ const int_value = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new imgui_6.ImVec2(18, 160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + /* static */ const values = STATIC("values#1072", [0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(7 /* FrameBg */, imgui_9.ImColor.HSV(i / 7.0, 0.5, 0.5)); + ImGui.PushStyleColor(8 /* FrameBgHovered */, imgui_9.ImColor.HSV(i / 7.0, 0.6, 0.5)); + ImGui.PushStyleColor(9 /* FrameBgActive */, imgui_9.ImColor.HSV(i / 7.0, 0.7, 0.5)); + ImGui.PushStyleColor(19 /* SliderGrab */, imgui_9.ImColor.HSV(i / 7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(18, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2 = STATIC("values2", [0.20, 0.80, 0.40, 0.25]); + const rows = 3; + const small_slider_size = new imgui_6.ImVec2(18, (160.0 - (rows - 1) * spacing) / rows); + for (let nx = 0; nx < 4; nx++) { + if (nx > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) { + ImGui.PushID(nx * rows + ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(15 /* GrabMinSize */, 40); + ImGui.VSliderFloat("##v", new imgui_6.ImVec2(40, 160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Layout")) { + if (ImGui.TreeNode("Child regions")) { + /* static */ const disable_mouse_wheel = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + ImGui.Text("Without border"); + /* static */ const line = STATIC("line", 50); + let goto_line = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, 32 /* EnterReturnsTrue */) || goto_line; + ImGui.PopItemWidth(); + ImGui.BeginChild("Sub1", new imgui_6.ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5, 300), false, 2048 /* HorizontalScrollbar */ | (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + for (let i = 0; i < 100; i++) { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + ImGui.SameLine(); + ImGui.PushStyleVar(5 /* ChildRounding */, 5.0); + ImGui.BeginChild("Sub2", new imgui_6.ImVec2(0, 300), true, (disable_mouse_wheel.value ? 16 /* NoScrollWithMouse */ : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) { + if (i === 50) + ImGui.NextColumn(); + const buf = `${("00000000" + (i * 5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new imgui_6.ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Widgets Width")) { + /* static */ const f = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); + ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); + ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); + ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Basic Horizontal Layout")) { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + // Text + ImGui.Text("Two items: Hello"); + ImGui.SameLine(); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Adjust spacing + ImGui.Text("More spacing: Hello"); + ImGui.SameLine(0, 20); + ImGui.TextColored(new imgui_7.ImVec4(1, 1, 0, 1), "Sailor"); + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); + ImGui.SameLine(); + ImGui.Button("Banana"); + ImGui.SameLine(); + ImGui.Button("Apple"); + ImGui.SameLine(); + ImGui.Button("Corniflower"); + // Button + ImGui.Text("Small buttons"); + ImGui.SameLine(); + ImGui.SmallButton("Like this one"); + ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.Text("x=150"); + ImGui.SameLine(300); + ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); + ImGui.SmallButton("x=150"); + ImGui.SameLine(300); + ImGui.SmallButton("x=300"); + // Checkbox + /* static */ const c1 = STATIC("c1", false), c2 = STATIC("c2", false), c3 = STATIC("c3", false), c4 = STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); + ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + // Various + /* static */ const f0 = STATIC("f0#1255", 1.0), f1 = STATIC("f1#1255", 2.0), f2 = STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items = ["AAAA", "BBBB", "CCCC", "DDDD"]; + /* static */ const item = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0, 5.0); + ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0, 5.0); + ImGui.PopItemWidth(); + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection = STATIC("selection", [0, 1, 2, 3]); + for (let i = 0; i < 4; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, imgui_3.IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + // Dummy + const sz = new imgui_6.ImVec2(30, 30); + ImGui.Button("A", sz); + ImGui.SameLine(); + ImGui.Dummy(sz); + ImGui.SameLine(); + ImGui.Button("B", sz); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Groups")) { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size = ImGui.GetItemRectSize(); + const values = [0.5, 0.20, 0.80, 0.60, 0.25]; + ImGui.PlotHistogram_Array("##values", values, imgui_3.IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + ImGui.Button("ACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new imgui_6.ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x) * 0.5, size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Text Baseline Alignment")) { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + ImGui.Text("One\nTwo\nThree"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + ImGui.Button("HOP##1"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("HOP##2"); + ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); + ImGui.SameLine(); + ImGui.Text("Banana"); + ImGui.Button("TEST##1"); + ImGui.SameLine(); + ImGui.Text("TEST"); + ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); + ImGui.SameLine(); + ImGui.Button("Widget##1"); + ImGui.SameLine(); + ImGui.Text("Widget"); + ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); + ImGui.SameLine(); + ImGui.Button("Widget##3"); + // Tree + const spacing = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##2"); + if (node_open) { + for (let i = 0; i < 6; i++) + ImGui.BulletText(`Item ${i}..`); + ImGui.TreePop(); + } // Dummy tree data + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); + ImGui.Button("Button##4"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Scrolling")) { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track = STATIC("track", true); + /* static */ const track_line = STATIC("track_line", 50), scroll_to_px = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); + track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); + scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) + track.value = false; + for (let i = 0; i < 5; i++) { + if (i > 0) + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new imgui_6.ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) { + if (track.value && line === track_line.value) { + ImGui.TextColored(new imgui_9.ImColor(255, 255, 0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y = ImGui.GetScrollY(), scroll_max_y = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.Bullet(); + ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); + ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(10 /* FrameRounding */, 3.0); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, ImGui.GetFrameHeightWithSpacing() * 7 + 30), true, 2048 /* HorizontalScrollbar */); + for (let line = 0; line < lines.value; line++) { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) { + if (n > 0) + ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf = n.toFixed(0); + const label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; + const hue = n * 0.05; + ImGui.PushStyleColor(21 /* Button */, imgui_9.ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(22 /* ButtonHovered */, imgui_9.ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(23 /* ButtonActive */, imgui_9.ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new imgui_6.ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x = ImGui.GetScrollX(), scroll_max_x = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta = 0.0; + ImGui.SmallButton("<<"); + if (ImGui.IsItemActive()) + scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text("Scroll from code"); + ImGui.SameLine(); + ImGui.SmallButton(">>"); + if (ImGui.IsItemActive()) + scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; + ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Clipping")) { + /* static */ const size = STATIC("size", new imgui_6.ImVec2(100, 100)), offset = STATIC("offset", new imgui_6.ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos = ImGui.GetCursorScreenPos(); + const clip_rect = new imgui_7.ImVec4(pos.x, pos.y, pos.x + size.value.x, pos.y + size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { + offset.value.x += ImGui.GetIO().MouseDelta.x; + offset.value.y += ImGui.GetIO().MouseDelta.y; + } + ImGui.GetWindowDrawList().AddRectFilled(pos, new imgui_6.ImVec2(pos.x + size.value.x, pos.y + size.value.y), imgui_8.IM_COL32(90, 90, 120, 255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize() * 2.0, new imgui_6.ImVec2(pos.x + offset.value.x, pos.y + offset.value.y), imgui_8.IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Popups & Modal windows")) { + if (ImGui.TreeNode("Popups")) { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + /* static */ const selected_fish = STATIC("selected_fish", -1); + const names = ["Bream", "Haddock", "Mackerel", "Pollock", "Tilefish"]; + /* static */ const toggles = STATIC("toggles", [true, false, false, false, false]); + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) { + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(names); i++) { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Context menus")) { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) { + if (ImGui.Selectable("Set to zero")) + value.value = 0.0; + if (ImGui.Selectable("Set to PI")) + value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + /* static */ const name = STATIC("name", new imgui_4.ImStringBuffer(32, "Label1")); + const buf = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, imgui_3.IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); + ImGui.Text("(<-- right-click here)"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Modals")) { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, 64 /* AlwaysAutoResize */)) { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + /* static */ const dont_ask_me_next_time = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + if (ImGui.Button("OK", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new imgui_6.ImVec2(120, 0))) { + ImGui.CloseCurrentPopup(); + } + ImGui.EndPopup(); + } + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color = STATIC("color#2", [0.4, 0.7, 0.0, 0.5]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Menus inside a regular window")) { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + if (ImGui.CollapsingHeader("Columns")) { + ImGui.PushID("Columns"); + // Basic columns + if (ImGui.TreeNode("Basic")) { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) { + const label = `Item ${n}`; + if (ImGui.Selectable(label)) { } + if (ImGui.Button(label, new imgui_6.ImVec2(-1, 0))) { } + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); + ImGui.NextColumn(); + ImGui.Text("Name"); + ImGui.NextColumn(); + ImGui.Text("Path"); + ImGui.NextColumn(); + ImGui.Text("Hovered"); + ImGui.NextColumn(); + ImGui.Separator(); + const names = ["One", "Two", "Three"]; + const paths = ["/path/one", "/path/two", "/path/three"]; + /* static */ const selected = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) { + const label = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, 2 /* SpanAllColumns */)) + selected.value = i; + const hovered = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); + ImGui.NextColumn(); + ImGui.Text(paths[i]); + ImGui.NextColumn(); + ImGui.Text(`${hovered}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category A")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { + ImGui.Text("Blah blah blah"); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Borders")) { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders = STATIC("h_borders", true); + /* static */ const v_borders = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4 * 3; i++) { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + if (ImGui.TreeNode("Horizontal Scrolling")) { + ImGui.SetNextWindowContentSize(new imgui_6.ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 20), false, 2048 /* HorizontalScrollbar */); + ImGui.Columns(10); + const ITEMS_COUNT = 2000; + const clipper = new imgui_13.ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + const node_open = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); + ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { + ImGui.BulletText("Sailor"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { + ImGui.BulletText("Marin"); + ImGui.TreePop(); + } + ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + if (ImGui.CollapsingHeader("Filtering")) { + /* static */ const filter = STATIC("filter#1864", new imgui_11.ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines = ["aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world"]; + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + if (ImGui.CollapsingHeader("Inputs & Focus")) { + const io = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); + ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + if (ImGui.TreeNode("Keyboard & Mouse State")) { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (io.MouseDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Mouse clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse dbl-clicked:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseDoubleClicked(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text("Mouse released:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.MouseDown); i++) + if (ImGui.IsMouseReleased(i)) { + ImGui.SameLine(); + ImGui.Text(`b${i}`); + } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + ImGui.Text("Keys down:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (io.KeysDownDuration[i] >= 0.0) { + ImGui.SameLine(); + ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); + } + ImGui.Text("Keys pressed:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyPressed(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text("Keys release:"); + for (let i = 0; i < imgui_3.IM_ARRAYSIZE(io.KeysDown); i++) + if (ImGui.IsKeyReleased(i)) { + ImGui.SameLine(); + ImGui.Text(i.toString()); + } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Tabbing")) { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf = STATIC("buf1#1921", new imgui_4.ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focus from code")) { + const focus_1 = ImGui.Button("Focus on 1"); + ImGui.SameLine(); + const focus_2 = ImGui.Button("Focus on 2"); + ImGui.SameLine(); + const focus_3 = ImGui.Button("Focus on 3"); + let has_focus = 0; + /* static */ const buf = STATIC("buf2#1944", new imgui_4.ImStringBuffer(128, "click on a button to set focus")); + if (focus_1) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 1; + if (focus_2) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 2; + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) + ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, imgui_3.IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) + has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Focused & Hovered Test")) { + /* static */ const embed_all_inside_a_child_window = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new imgui_6.ImVec2(0, ImGui.GetFontSize() * 25), true); + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(1 /* ChildWindows */)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(2 /* RootWindow */)}\n`); + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText(`IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(1 /* ChildWindows */)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(1 /* ChildWindows */ | 2 /* RootWindow */)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(2 /* RootWindow */)}\n"`); + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText(`IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(4 /* AllowWhenBlockedByPopup */)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(16 /* AllowWhenBlockedByActiveItem */)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(32 /* AllowWhenOverlapped */)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(52 /* RectOnly */)}\n`); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Dragging")) { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) { + // Draw a line between the button and the mouse cursor + const draw_list = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[21 /* Button */]), 4.0); + draw_list.PopClipRect(); + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold = ImGui.GetMouseDragDelta(0); + const mouse_delta = io.MouseDelta; + ImGui.SameLine(); + ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + if (ImGui.TreeNode("Mouse cursors")) { + const mouse_cursors_names = ["Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE"]; + imgui_2.IM_ASSERT(imgui_3.IM_ARRAYSIZE(mouse_cursors_names) === 7 /* COUNT */); + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); + ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < 7 /* COUNT */; i++) { + const label = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); + ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + ImGui.End(); +} +exports.ShowDemoWindow = ShowDemoWindow; +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +function ShowStyleSelector(label) { + /* static */ const style_idx = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) { + switch (style_idx.value) { + case 0: + ImGui.StyleColorsClassic(); + break; + case 1: + ImGui.StyleColorsDark(); + break; + case 2: + ImGui.StyleColorsLight(); + break; + } + return true; + } + return false; +} +exports.ShowStyleSelector = ShowStyleSelector; +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +function ShowFontSelector(label) { + const io = ImGui.GetIO(); + const font_current = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker("- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} +exports.ShowFontSelector = ShowFontSelector; +function ShowStyleEditor(ref = null) { + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style = ImGui.GetStyle(); + /* static */ const ref_saved_style = STATIC("ref_saved_style", new imgui_10.ImGuiStyle()); + // Default to using internal storage as reference + /* static */ const init = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + if (ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ ShowFontSelector("Fonts##Selector"); + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { + let window_border = (style.WindowBorderSize > 0.0); + if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) + style.WindowBorderSize = window_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let frame_border = (style.FrameBorderSize > 0.0); + if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) + style.FrameBorderSize = frame_border ? 1.0 : 0.0; + } + ImGui.SameLine(); + { + let popup_border = (style.PopupBorderSize > 0.0); + if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) + style.PopupBorderSize = popup_border ? 1.0 : 0.0; + } + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + if (ImGui.TreeNode("Rendering")) { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); + ImGui.SameLine(); + ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) + style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Settings")) { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); + ImGui.SameLine(); + ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Colors")) { + /* static */ const output_dest = STATIC("output_dest", 0); + /* static */ const output_only_modified = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < 43 /* COUNT */; i++) { + const col = style.Colors[i]; + const name = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); + ImGui.PushItemWidth(120); + ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); + ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + /* static */ const filter = STATIC("filter#2223", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + /* static */ const alpha_flags = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); + ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, 1024 /* AlphaPreview */); + ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, 2048 /* AlphaPreviewHalf */); + ImGui.BeginChild("#colors", new imgui_6.ImVec2(0, 300), true, 16384 /* AlwaysVerticalScrollbar */ | 32768 /* AlwaysHorizontalScrollbar */); + ImGui.PushItemWidth(-160); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], 512 /* AlphaBar */ | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Save")) + ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + if (ImGui.Button("Revert")) + style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + ImGui.TreePop(); + } + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened = ImGui.TreeNode("Fonts"); + if (fonts_opened) { + const atlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) { + ImGui.Image(atlas.TexID, new imgui_6.ImVec2(atlas.TexWidth, atlas.TexHeight), new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(1, 1), new imgui_9.ImColor(255, 255, 255, 255).Value, new imgui_9.ImColor(255, 255, 255, 128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + ImGui.PopItemWidth(); +} +exports.ShowStyleEditor = ShowStyleEditor; +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar() { + if (ImGui.BeginMainMenuBar()) { + if (ImGui.BeginMenu("File")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) { + if (ImGui.MenuItem("Undo", "CTRL+Z")) { } + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) { } // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) { } + if (ImGui.MenuItem("Copy", "CTRL+C")) { } + if (ImGui.MenuItem("Paste", "CTRL+V")) { } + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} +function ShowExampleMenuFile() { + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) { } + if (ImGui.MenuItem("Open", "Ctrl+O")) { } + if (ImGui.BeginMenu("Open Recent")) { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) { } + if (ImGui.MenuItem("Save As..")) { } + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) { + /* static */ const enabled = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new imgui_6.ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f = STATIC("f#2408", 0.5); + /* static */ const n = STATIC("n", 0); + /* static */ const b = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) { + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < 43 /* COUNT */; i++) { + const name = ImGui.GetStyleColorName(i); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) { + imgui_2.IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) { } + if (ImGui.MenuItem("Quit", "Alt+F4")) { } +} +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open) { + if (!ImGui.Begin("Example: Auto-resizing window", p_open, 64 /* AlwaysAutoResize */)) { + ImGui.End(); + return; + } + /* static */ const lines = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open) { + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + static Square(data) { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + static Step(data) { + const step = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + /* static */ const auto_resize = STATIC("auto_resize", false); + /* static */ const type = STATIC("type", 0); + /* static */ const display_lines = STATIC("display_lines", 10); + if (type.value === 0) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 0), new imgui_6.ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, -1), new imgui_6.ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(100, 100), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(400, -1), new imgui_6.ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(-1, 400), new imgui_6.ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) + ImGui.SetNextWindowSizeConstraints(new imgui_6.ImVec2(0, 0), new imgui_6.ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100); // Fixed Step + const flags = auto_resize.value ? 64 /* AlwaysAutoResize */ : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) { + const desc = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(200, 200)); + } + ImGui.SameLine(); + if (ImGui.Button("500x500")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(500, 500)); + } + ImGui.SameLine(); + if (ImGui.Button("800x200")) { + ImGui.SetWindowSize(new imgui_6.ImVec2(800, 200)); + } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, imgui_3.IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open) { + const DISTANCE = 10.0; + /* static */ const corner = STATIC("corner", 0); + const window_pos = new imgui_6.ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot = new imgui_6.ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, 1 /* Always */, window_pos_pivot); + ImGui.PushStyleColor(2 /* WindowBg */, new imgui_7.ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, 1 /* NoTitleBar */ | 2 /* NoResize */ | 64 /* AlwaysAutoResize */ | 4 /* NoMove */ | 256 /* NoSavedSettings */)) { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) + corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) + corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) + corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) + corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open) { + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 100), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 200), 4 /* FirstUseEver */); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf = `Animated title ${"|/-\\".charAt((ImGui.GetTime() / 0.25) & 3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new imgui_6.ImVec2(100, 300), 4 /* FirstUseEver */); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(350, 560), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Custom rendering", p_open)) { + ImGui.End(); + return; + } + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list = ImGui.GetWindowDrawList(); + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz = STATIC("sz", 36.0); + /* static */ const col = STATIC("color#2583", new imgui_7.ImVec4(1.0, 1.0, 0.4, 1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value); + { + const p = ImGui.GetCursorScreenPos(); + const col32 = imgui_8.IM_COL32(col.value.x * 255, col.value.y * 255, col.value.z * 255, col.value.w * 255); + let x = p.x + 4.0, y = p.y + 4.0, spacing = 8.0; + for (let n = 0; n < 2; n++) { + const thickness = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 20, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 0.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 15 /* All */, thickness); + x += sz.value + spacing; + draw_list.AddRect(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */, thickness); + x += sz.value + spacing; + draw_list.AddTriangle(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x += sz.value + spacing; + draw_list.AddLine(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x, y + sz.value), col32, thickness); + x += spacing; + draw_list.AddBezierCurve(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value * 1.3, y + sz.value * 0.3), new imgui_6.ImVec2(x + sz.value - sz.value * 1.3, y + sz.value - sz.value * 0.3), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, thickness); + x = p.x + 4; + y += sz.value + spacing; + } + draw_list.AddCircleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y + sz.value * 0.5), sz.value * 0.5, col32, 32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0); + x += sz.value + spacing; + draw_list.AddRectFilled(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), col32, 10.0, 1 /* TopLeft */ | 8 /* BotRight */); + x += sz.value + spacing; + draw_list.AddTriangleFilled(new imgui_6.ImVec2(x + sz.value * 0.5, y), new imgui_6.ImVec2(x + sz.value, y + sz.value - 0.5), new imgui_6.ImVec2(x, y + sz.value - 0.5), col32); + x += sz.value + spacing; + draw_list.AddRectFilledMultiColor(new imgui_6.ImVec2(x, y), new imgui_6.ImVec2(x + sz.value, y + sz.value), imgui_8.IM_COL32(0, 0, 0), imgui_8.IM_COL32(255, 0, 0), imgui_8.IM_COL32(255, 255, 0), imgui_8.IM_COL32(0, 255, 0)); + ImGui.Dummy(new imgui_6.ImVec2((sz.value + spacing) * 8, (sz.value + spacing) * 3)); + } + ImGui.Separator(); + { + /* static */ const points = STATIC("points", new imgui_5.ImVector()); + /* static */ const adding_line = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) + points.value.clear(); + if (points.value.Size >= 2) { + ImGui.SameLine(); + if (ImGui.Button("Undo")) { + points.value.pop_back(); + points.value.pop_back(); + } + } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) + canvas_size.x = 50.0; + if (canvas_size.y < 50.0) + canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(50, 50, 50), imgui_8.IM_COL32(50, 50, 60), imgui_8.IM_COL32(60, 60, 70), imgui_8.IM_COL32(50, 50, 60)); + draw_list.AddRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), imgui_8.IM_COL32(255, 255, 255)); + let adding_preview = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas = new imgui_6.ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) { + if (!adding_line.value && ImGui.IsMouseClicked(0)) { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new imgui_6.ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new imgui_6.ImVec2(canvas_pos.x + points.value.Data[i + 1].x, canvas_pos.y + points.value.Data[i + 1].y), imgui_8.IM_COL32(255, 255, 0, 255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + constructor() { + // char InputBuf[256]; + this.InputBuf = new imgui_4.ImStringBuffer(256, ""); + // ImVector Items; + this.Items = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + // ImVector History; + this.History = new imgui_5.ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + this.HistoryPos = -1; + // ImVector Commands; + this.Commands = new imgui_5.ImVector(); + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + delete() { } + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + ClearLog() { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + // void Draw(const char* title, bool* p_open) + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin(title, p_open)) { + ImGui.End(); + return; + } + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + // TODO: display items starting from the bottom + if (ImGui.SmallButton("Add Dummy Text")) { + this.AddLog(`${this.Items.Size} some text`); + this.AddLog("some more text"); + this.AddLog("display very important message here!"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { + this.AddLog("[error] something went wrong"); + } + ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { + this.ClearLog(); + } + ImGui.SameLine(); + const copy_to_clipboard = ImGui.SmallButton("Copy"); + ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) + this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + ImGui.Separator(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(0, 0)); + /* static */ const filter = STATIC("filter#2763", new imgui_11.ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + const footer_height_to_reserve = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new imgui_6.ImVec2(0, -footer_height_to_reserve), false, 2048 /* HorizontalScrollbar */); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) { + if (ImGui.Selectable("Clear")) + this.ClearLog(); + ImGui.EndPopup(); + } + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(4, 1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) { + // const char* item = Items[i]; + const item = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col = new imgui_7.ImVec4(1.0, 1.0, 1.0, 1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) + col = new imgui_7.ImVec4(1.0, 0.4, 0.4, 1.0); + else if (/^# /.test(item)) + col = new imgui_7.ImVec4(1.0, 0.78, 0.58, 1.0); + ImGui.PushStyleColor(0 /* Text */, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + // Command-line + if (ImGui.InputText("Input", this.InputBuf, imgui_3.IM_ARRAYSIZE(this.InputBuf), 32 /* EnterReturnsTrue */ | 64 /* CallbackCompletion */ | 128 /* CallbackHistory */, ExampleAppConsole.TextEditCallbackStub, this)) { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(3 /* RootAndChildWindows */) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + ImGui.End(); + } + // void ExecCommand(const char* command_line) + ExecCommand(command_line) { + this.AddLog(`# ${command_line}\n`); + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size - 1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") { + this.ClearLog(); + } + else if (command_line.toUpperCase() === "HELP") { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + else if (command_line.toUpperCase() === "HISTORY") { + const first = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data) { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console = data.UserData; + return console.TextEditCallback(data); + } + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data) { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) { + case 64 /* CallbackCompletion */: + { + // Example of TEXT COMPLETION + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + break; + } + case 128 /* CallbackHistory */: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} +function ShowExampleAppConsole(p_open) { + /* static */ const console = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog { + constructor() { + // ImGuiTextBuffer Buf; + this.Buf = new imgui_12.ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + this.Filter = new imgui_11.ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + this.LineOffsets = new imgui_5.ImVector(); + // bool ScrollToBottom; + this.ScrollToBottom = false; + } + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear() { this.Buf.clear(); this.LineOffsets.clear(); } + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt) { + let old_size = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + Draw(title, p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 400), 4 /* FirstUseEver */); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) + this.Clear(); + ImGui.SameLine(); + const copy = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new imgui_6.ImVec2(0, 0), false, 2048 /* HorizontalScrollbar */); + if (copy) + ImGui.LogToClipboard(); + if (this.Filter.IsActive()) { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else { + ImGui.TextUnformatted(this.Buf.begin()); + } + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open) { + /* static */ const log = STATIC("log#3073", new ExampleAppLog()); + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time = STATIC("last_time", -1.0); + const time = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) { + const random_words = ["system", "info", "warning", "error", "fatal", "notice", "log"]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * imgui_3.IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + log.value.Draw("Example: Log", p_open); +} +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(500, 440), 4 /* FirstUseEver */); + if (ImGui.Begin("Example: Layout", p_open, 1024 /* MenuBar */)) { + if (ImGui.BeginMenuBar()) { + if (ImGui.BeginMenu("File")) { + if (ImGui.MenuItem("Close")) + p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + // left + /* static */ const selected = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new imgui_6.ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) { + const label = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new imgui_6.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) { } + ImGui.SameLine(); + if (ImGui.Button("Save")) { } + ImGui.EndGroup(); + } + ImGui.End(); +} +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(430, 450), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Property editor", p_open)) { + ImGui.End(); + return; + } + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_6.ImVec2(2, 2)); + ImGui.Columns(2); + ImGui.Separator(); + class funcs { + static ShowDummyObject(prefix, uid) { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) { + /* static */ const dummy_members = STATIC("dummy_members", [0.0, 0.0, 1.0, 3.1416, 100.0, 999.0]); + for (let i = 0; i < 8; i++) { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) { + funcs.ShowDummyObject("Child", 424242); + } + else { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref = [dummy_members.value[i] || 0]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open) { + ImGui.SetNextWindowSize(new imgui_6.ImVec2(520, 600), 4 /* FirstUseEver */); + if (!ImGui.Begin("Example: Long text display", p_open)) { + ImGui.End(); + return; + } + /* static */ const test_type = STATIC("test_type", 0); + /* static */ const log = STATIC("log#3217", new imgui_12.ImGuiTextBuffer()); + /* static */ const lines = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { + log.value.clear(); + lines.value = 0; + } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value + i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + const clipper = new imgui_13.ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_6.ImVec2(0, 0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} +// End of Demo code +// #else +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} +// #endif +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX2RlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG9CQUFvQjtBQUNwQixjQUFjOztBQUVkLGlHQUFpRztBQUNqRyxzSUFBc0k7QUFDdEksdUdBQXVHO0FBQ3ZHLGdKQUFnSjtBQUNoSiwwSkFBMEo7QUFDMUosMEZBQTBGO0FBQzFGLHNLQUFzSztBQUN0Syx3SEFBd0g7QUFDeEgsYUFBYTtBQUNiLCtEQUErRDtBQUUvRCxzSkFBc0o7QUFDdEosaUpBQWlKO0FBQ2pKLHNJQUFzSTtBQUN0SSw0SkFBNEo7QUFDNUosa0tBQWtLO0FBRWxLLDZEQUE2RDtBQUM3RCxrQ0FBa0M7QUFDbEMsU0FBUztBQUVULHFCQUFxQjtBQUNyQixrREFBa0Q7QUFDbEQsd0VBQXdFO0FBQ3hFLDJEQUEyRDtBQUMzRCwwREFBMEQ7QUFDMUQsb0VBQW9FO0FBQ3BFLDBDQUEwQztBQUMxQyxRQUFRO0FBQ1IsMENBQTBDO0FBQzFDLFNBQVM7QUFFVCxpQ0FBaUM7QUFDakMsbUNBQXdDO0FBQ3hDLG1DQUFvQztBQUNwQyxtQ0FBdUM7QUFDdkMsbUNBQXlDO0FBcUJ6QyxtQ0FBbUM7QUFDbkMsbUNBQW1EO0FBQ25ELG1DQUFtRDtBQUNuRCxtQ0FBbUM7QUFDbkMsbUNBQWtDO0FBRWxDLG9DQUFxQztBQUVyQyxvQ0FBMEM7QUFDMUMsb0NBQTBDO0FBQzFDLG9DQUEyQztBQUkzQyxrQkFBa0I7QUFDbEIsa0lBQWtJO0FBQ2xJLDZCQUE2QjtBQUM3QixTQUFTO0FBQ1QsbUJBQW1CO0FBQ25CLCtKQUErSjtBQUMvSixzTUFBc007QUFDdE0sZ0lBQWdJO0FBQ2hJLDhIQUE4SDtBQUM5SCx3VEFBd1Q7QUFDeFQsMkNBQTJDO0FBQzNDLHFJQUFxSTtBQUNySSxTQUFTO0FBQ1QsMEJBQTBCO0FBQzFCLDZIQUE2SDtBQUM3SCw0SUFBNEk7QUFDNUksNkpBQTZKO0FBQzdKLG1JQUFtSTtBQUNuSSxzQkFB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QUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxDQUFDLENBQUM7Z0JBQzlMLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUMzQixDQUFDO29CQUNHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxFQUFFLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUss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LEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDMUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2hILEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFckIsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ2xFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxD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QyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQy9NLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztvQkFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFBQyxDQUFDO1lBQ3pLLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFNUksS0FBSyxDQUFDLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQzVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsTUFBTSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFDakUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNyQixLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQzlCLENBQUM7WUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUM7WUFDM0UsWUFBWSxDQUFDLE1BQU0sR0FBRyxHQUEyQixNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksc0JBQWMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN0RyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLG9CQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxvQkFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RCxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxvQkFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLDRIQUE0SDtZQUM1SCxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLG9CQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FDdEMsQ0FBQztZQUNHLE1BQU0sT0FBTyxHQUFZLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEUsTUFBTSxPQUFPLEdBQVksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0RSxNQUFNLE9BQU8sR0FBWSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BELElBQUksU0FBUyxHQUFXLENBQUMsQ0FBQztZQUMxQixZQUFZLENBQUMsTUFBTSxHQUFHLEdBQTJCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxzQkFBYyxDQUFDLEdBQUcsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7WUFFaEksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6RCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUV4QyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxvQkFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBRXhDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxvQkFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDVixLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELElBQUk7Z0JBQ0EsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMEVBQTBFLENBQUMsQ0FBQztZQUM5RixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1lBQ0csWUFBWSxDQUFDLE1BQU0sK0JBQStCLEdBQW9CLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2SCxLQUFLLENBQUMsUUFBUSxDQUFDLGlFQUFpRSxFQUFFLENBQUMsS0FBSyxHQUFHLCtCQUErQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsK0JBQStCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3BMLEVBQUUsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQztnQkFDdEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXRGLGtHQUFrRztZQUNsRyxLQUFLLENBQUMsVUFBVSxDQUNaLHVCQUF1QixLQUFLLENBQUMsZUFBZSxFQUFFLElBQUk7Z0JBQ2xELG9DQUFvQyxLQUFLLENBQUMsZUFBZSxzQkFBZ0MsSUFBSTtnQkFDN0YsZ0RBQWdELEtBQUssQ0FBQyxlQUFlLENBQUMseUNBQTZELENBQUMsSUFBSTtnQkFDeEksa0NBQWtDLEtBQUssQ0FBQyxlQUFlLG9CQUE4QixJQUFJLENBQUMsQ0FBQztZQUUvRixrR0FBa0c7WUFDbEcsS0FBSyxDQUFDLFVBQVUsQ0FDWix1QkFBdUIsS0FBSyxDQUFDLGVBQWUsRUFBRSxJQUFJO2dCQUNsRCwrQ0FBK0MsS0FBSyxDQUFDLGVBQWUsaUNBQTJDLElBQUk7Z0JBQ25ILG9EQUFvRCxLQUFLLENBQUMsZUFBZSx1Q0FBZ0QsSUFBSTtnQkFDN0gsb0NBQW9DLEtBQUssQ0FBQyxlQUFlLHNCQUFnQyxJQUFJO2dCQUM3RixnREFBZ0QsS0FBSyxDQUFDLGVBQWUsQ0FBQyx5Q0FBNkQsQ0FBQyxJQUFJO2dCQUN4SSxrQ0FBa0MsS0FBSyxDQUFDLGVBQWUsb0JBQThCLEtBQUssQ0FBQyxDQUFDO1lBRWhHLHFMQUFxTDtZQUNyTCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxVQUFVLENBQ1oscUJBQXFCLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSTtnQkFDOUMsNkNBQTZDLEtBQUssQ0FBQyxhQUFhLGlDQUEyQyxJQUFJO2dCQUMvRyxrREFBa0QsS0FBSyxDQUFDLGFBQWEsdUNBQWdELElBQUk7Z0JBQ3pILHlDQUF5QyxLQUFLLENBQUMsYUFBYSw4QkFBdUMsSUFBSTtnQkFDdkcsOEJBQThCLEtBQUssQ0FBQyxhQUFhLG1CQUE0QixJQUFJLENBQUMsQ0FBQztZQUV2RixLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1lBQ2hGLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVqQixFQUFFLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVyQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDL0IsQ0FBQztZQUNHLEtBQUssQ0FBQyxXQUFXLENBQUMsdUZBQXVGLENBQUMsQ0FBQztZQUMzRyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUU7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLE1BQU0sK0JBQStCLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLDJCQUEyQixLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsMkJBQTJCLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuTyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUN6QixDQUFDO2dCQUNHLHNEQUFzRDtnQkFDdEQsTUFBTSxTQUFTLEdBQXFCLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDbkMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN0SyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBRXhCLCtJQUErSTtnQkFDL0ksc0hBQXNIO2dCQUN0SCxNQUFNLFNBQVMsR0FBcUIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEUsTUFBTSx5QkFBeUIsR0FBcUIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLFdBQVcsR0FBcUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDcEUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsd0JBQXdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUsseUJBQXlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvUSxDQUFDO1lBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQ3BDLENBQUM7WUFDRyxNQUFNLG1CQUFtQixHQUFhLENBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFFLENBQUM7WUFDM0gsaUJBQVMsQ0FBQyxvQkFBWSxDQUFDLG1CQUFtQixDQUFDLGtCQUEyQixDQUFDLENBQUM7WUFFeEUsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUMsY0FBYyxDQUFDLGtQQUFrUCxDQUFDLENBQUM7WUFDclIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZ0JBQXlCLEVBQUUsQ0FBQyxFQUFFLEVBQy9DLENBQUM7Z0JBQ0csTUFBTSxLQUFLLEdBQVcsZ0JBQWdCLENBQUMsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9DLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUM7QUF0d0RELHdDQXN3REM7QUFFRCx3R0FBd0c7QUFDeEcsMEpBQTBKO0FBQzFKLDJCQUFrQyxLQUFhO0lBRTNDLFlBQVksQ0FBQyxNQUFNLFNBQVMsR0FBbUIsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQ3ZHLENBQUM7UUFDRyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQ3hCLENBQUM7WUFDRCxLQUFLLENBQUM7Z0JBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQUMsS0FBSyxDQUFDO1lBQzFDLEtBQUssQ0FBQztnQkFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQUMsS0FBSyxDQUFDO1lBQ3ZDLEtBQUssQ0FBQztnQkFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFBQyxLQUFLLENBQUM7UUFDeEMsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQWRELDhDQWNDO0FBRUQscURBQXFEO0FBQ3JELDJGQUEyRjtBQUMzRiwwQkFBaUMsS0FBYTtJQUUxQyxNQUFNLEVBQUUsR0FBWSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsTUFBTSxZQUFZLEdBQVcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUM7UUFDRyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTztRQUN0RCxpREFBaUQ7UUFDakQscUdBQXFHO1FBQ3JHLCtDQUErQztRQUMvQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQixjQUFjLENBQ1YsZ0VBQWdFO1FBQ2hFLDZGQUE2RjtRQUM3RixrRUFBa0U7UUFDbEUsc0dBQXNHLENBQUMsQ0FBQztBQUNoSCxDQUFDO0FBbEJELDRDQWtCQztBQUVELHlCQUFnQyxNQUF5QixJQUFJO0lBRXpELDZJQUE2STtJQUM3SSxNQUFNLEtBQUssR0FBZSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0MsWUFBWSxDQUFDLE1BQU0sZUFBZSxHQUF1QixNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxtQkFBVSxFQUFFLENBQUMsQ0FBQztJQUVyRyxpREFBaUQ7SUFDakQsWUFBWSxDQUFDLE1BQU0sSUFBSSxHQUFvQixNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztRQUMzQixlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNuQixFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDO1FBQ2IsR0FBRyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFFaEMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFbkQsRUFBRSxDQUFDLENBQVcsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxVQUFVLENBQUEsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUc5QyxzQkFBc0I7SUFDdEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwSCxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQywyREFBMkQ7SUFDekcsQ0FBQztRQUFDLElBQUksYUFBYSxHQUFZLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUFDLENBQUM7SUFDMU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLENBQUM7UUFBQyxJQUFJLFlBQVksR0FBWSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUFDLENBQUM7SUFDbk0sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLENBQUM7UUFBQyxJQUFJLFlBQVksR0FBWSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUFDLENBQUM7SUFFbk0scUJBQXFCO0lBQ3JCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pCLGNBQWMsQ0FBQyw4SUFBOEksQ0FBQyxDQUFDO0lBRS9KLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDaEMsQ0FBQztRQUNHLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFBQyxjQUFjLENBQUMsb0dBQW9HLENBQUMsQ0FBQztRQUNqUCxLQUFLLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdEcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixLQUFLLENBQUMsU0FBUyxDQUFDLDhCQUE4QixFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUM7WUFBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ3hFLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMscUtBQXFLO1FBQzlRLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDL0IsQ0FBQztRQUNHLEtBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25ILEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkUsS0FBSyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRixLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25GLEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkgsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuSCxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzSCxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEgsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hILEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4SCxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0SCxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25ILEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkgsS0FBSyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvSCxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hILEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRixLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUFDLGNBQWMsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ3JMLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUM3QixDQUFDO1FBQ0csWUFBWSxDQUFDLE1BQU0sV0FBVyxHQUFtQixNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLFlBQVksQ0FBQyxNQUFNLG9CQUFvQixHQUFvQixNQUFNLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ25DLENBQUM7WUFDRyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLElBQUk7Z0JBQ0EsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUMsMkNBQTJDLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDeEUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQ3ZDLENBQUM7Z0JBQ0csTUFBTSxHQUFHLEdBQStCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sSUFBSSxHQUFXLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQztZQUNqSyxDQUFDO1lBQ0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuTCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFBQyxLQUFLLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBRXJJLEtBQUssQ0FBQyxJQUFJLENBQUMsaUdBQWlHLENBQUMsQ0FBQztRQUU5RyxZQUFZLENBQUMsTUFBTSxNQUFNLEdBQTRCLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSx3QkFBZSxFQUFFLENBQUMsQ0FBQztRQUNsRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFeEMsWUFBWSxDQUFDLE1BQU0sV0FBVyxHQUFnQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNHLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSywwQkFBbUMsQ0FBQztRQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6SSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssOEJBQXVDLENBQUM7UUFFMUgsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSwyRUFBcUYsQ0FBQyxDQUFDO1FBQzdJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsRUFDdkMsQ0FBQztZQUNHLE1BQU0sSUFBSSxHQUFXLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixRQUFRLENBQUM7WUFDYixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQStCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzQyxDQUFDO2dCQUNHLGtKQUFrSjtnQkFDbEoseUdBQXlHO2dCQUN6RyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuSCxDQUFDO1lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsOEZBQThGO0lBQzlGLE1BQU0sWUFBWSxHQUFZLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ2pCLENBQUM7UUFDRyxNQUFNLEtBQUssR0FBZ0IsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztRQUMvQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsU0FBUyxVQUFVLENBQUMsQ0FBQyxDQUNuRyxDQUFDO1lBQ0csS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksY0FBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxlQUFPLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksZUFBTyxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hMLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6Qiw4Q0FBOEM7UUFDOUMsSUFBSTtRQUNKLHNDQUFzQztRQUN0QywwQkFBMEI7UUFDMUIsc0xBQXNMO1FBQ3RMLG1HQUFtRztRQUNuRywrQkFBK0I7UUFDL0IsUUFBUTtRQUNSLGdDQUFnQztRQUNoQyxxRUFBcUU7UUFDckUsMkJBQTJCO1FBQzNCLDZHQUE2RztRQUM3Ryx3ZEFBd2Q7UUFDeGQsd0hBQXdIO1FBQ3hILCtGQUErRjtRQUMvRiw0TEFBNEw7UUFDNUwsK0VBQStFO1FBQy9FLFlBQVk7UUFDWiwrREFBK0Q7UUFDL0QsbUtBQW1LO1FBQ25LLFlBQVk7UUFDWiwwRUFBMEU7UUFDMUUsWUFBWTtRQUNaLHFGQUFxRjtRQUNyRix5S0FBeUs7UUFDekssMENBQTBDO1FBQzFDLDhEQUE4RDtRQUM5RCxnQkFBZ0I7UUFDaEIsaUNBQWlDO1FBQ2pDLGdEQUFnRDtRQUNoRCw2RUFBNkU7UUFDN0UsMkpBQTJKO1FBQzNKLG9CQUFvQjtRQUNwQixnRUFBZ0U7UUFDaEUsZ0ZBQWdGO1FBQ2hGLG9FQUFvRTtRQUNwRSx5RUFBeUU7UUFDekUsb0RBQW9EO1FBQ3BELHdCQUF3QjtRQUN4QixzSkFBc0o7UUFDdEosNEZBQTRGO1FBQzVGLDBGQUEwRjtRQUMxRiw4SEFBOEg7UUFDOUgsOFBBQThQO1FBQzlQLG9GQUFvRjtRQUNwRiw0QkFBNEI7UUFDNUIsb0RBQW9EO1FBQ3BELHVFQUF1RTtRQUN2RSxpREFBaUQ7UUFDakQsNkVBQTZFO1FBQzdFLHVIQUF1SDtRQUN2SCxzSEFBc0g7UUFDdEgsa0RBQWtEO1FBQ2xELDRCQUE0QjtRQUM1Qix3QkFBd0I7UUFDeEIsaUhBQWlIO1FBQ2pILHVDQUF1QztRQUN2QyxvQkFBb0I7UUFDcEIsZ0JBQWdCO1FBQ2hCLG9EQUFvRDtRQUNwRCwrQkFBK0I7UUFDL0IsWUFBWTtRQUNaLDJCQUEyQjtRQUMzQixRQUFRO1FBQ1IscUJBQXFCO1FBQ3JCLElBQUk7UUFDSixZQUFZLENBQUMsTUFBTSxZQUFZLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFjLHlCQUF5QjtRQUNqSyxLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUMvSixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN6QixDQUFDO0FBaE9ELDBDQWdPQztBQUVELGdFQUFnRTtBQUNoRTtJQUVJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQzdCLENBQUM7UUFDRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzVCLENBQUM7WUFDRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM1QixDQUFDO1lBQ0csRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN4QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBRSxnQkFBZ0I7WUFDeEUsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDdkMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztZQUN4QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNCLENBQUM7QUFDTCxDQUFDO0FBRUQ7SUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUM3QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO0lBQ3hDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FDbkMsQ0FBQztRQUNHLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvQixLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDOUIsQ0FBQztZQUNHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ2pDLENBQUM7Z0JBQ0csbUJBQW1CLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUNELEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUN4QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUM7SUFDbkMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDL0IsQ0FBQztRQUNHLFlBQVksQ0FBQyxNQUFNLE9BQU8sR0FBb0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNoRixLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBbUIsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQW1CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFvQixNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2pGLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDOUQsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQzlCLENBQUM7UUFDRyxLQUFLLENBQUMsWUFBWSx1QkFBNkIsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQ3ZDLENBQUM7WUFDRyxNQUFNLElBQUksR0FBVyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBYSxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQ3ZDLENBQUM7UUFDRyxpQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUM3QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDO0FBQzVDLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsa0NBQWtDLE1BQXlCO0lBRXZELEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxNQUFNLDRCQUFxQyxDQUFDLENBQzlGLENBQUM7UUFDRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixNQUFNLENBQUM7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQU0sS0FBSyxHQUFtQixNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsMkxBQTJMLENBQUMsQ0FBQztJQUN4TSxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7SUFDdkcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxnRUFBZ0U7QUFDaEUseUNBQXlDLE1BQXlCO0lBRTlELHdCQUF3QiwyREFBMkQ7O1FBRXhFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBcUM7WUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBcUM7WUFDcEQsTUFBTSxJQUFJLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzVFLENBQUM7S0FDSjtJQUVELFlBQVksQ0FBQyxNQUFNLFdBQVcsR0FBb0IsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvRSxZQUFZLENBQUMsTUFBTSxJQUFJLEdBQW1CLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsWUFBWSxDQUFDLE1BQU0sYUFBYSxHQUFtQixNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFLLElBQUksY0FBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQU0sZ0JBQWdCO0lBQ3ZJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFLLElBQUksY0FBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQU0sa0JBQWtCO0lBQ3pJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLGNBQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0lBQzVKLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFHLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBVSxnQkFBZ0I7SUFDOUgsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUcsSUFBSSxjQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFVLGlCQUFpQjtJQUMvSCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQU0sSUFBSSxjQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRyxnQkFBZ0I7SUFDNUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFNLElBQUksY0FBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBLGFBQWE7SUFFekssTUFBTSxLQUFLLEdBQXFCLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQywyQkFBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUM5RCxDQUFDO1FBQ0csTUFBTSxJQUFJLEdBQWE7WUFDbkIsc0JBQXNCO1lBQ3RCLHdCQUF3QjtZQUN4QiwyQkFBMkI7WUFDM0IsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQix1QkFBdUI7WUFDdkIsMkJBQTJCO1NBQzlCLENBQUM7UUFDRixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDO1FBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdGLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUM7UUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0YsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQztRQUMzRSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxvQkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN4RixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUksOERBQThELENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUM7QUFFRCwrSEFBK0g7QUFDL0gsb0NBQW9DLE1BQXlCO0lBRXpELE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQztJQUM5QixZQUFZLENBQUMsTUFBTSxNQUFNLEdBQW1CLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxVQUFVLEdBQXFCLElBQUksY0FBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hNLE1BQU0sZ0JBQWdCLEdBQXFCLElBQUksY0FBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLGtCQUFvQixnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZFLEtBQUssQ0FBQyxjQUFjLG1CQUFvQixJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCO0lBQ2xHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLHFDQUFxRCw0QkFBa0MsaUJBQXdCLDRCQUFpQyxDQUFDLENBQUMsQ0FDcE0sQ0FBQztRQUNHLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztRQUM3RixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FDcEMsQ0FBQztZQUNHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzNFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzlFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQy9FLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELCtFQUErRTtBQUMvRSw2TUFBNk07QUFDN00sb0NBQW9DLE1BQXlCO0lBRXpELDhEQUE4RDtJQUM5RCx1RUFBdUU7SUFFdkUsK0RBQStEO0lBQy9ELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGNBQU0sQ0FBQyxHQUFHLEVBQUMsR0FBRyxDQUFDLHVCQUF5QixDQUFDO0lBQ3BFLEtBQUssQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1GQUFtRixDQUFDLENBQUM7SUFDaEcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRVosS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsdUJBQXlCLENBQUM7SUFDcEUsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsbUZBQW1GLENBQUMsQ0FBQztJQUNoRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7SUFFWix1RkFBdUY7SUFDdkYsTUFBTSxHQUFHLEdBQVcsa0JBQWtCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUMsSUFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQztJQUMxSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxjQUFNLENBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyx1QkFBeUIsQ0FBQztJQUNwRSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVELHFFQUFxRTtBQUNyRSx1Q0FBdUMsTUFBeUI7SUFFNUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsdUJBQXlCLENBQUM7SUFDckUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ3RELENBQUM7UUFDRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixNQUFNLENBQUM7SUFDWCxDQUFDO0lBRUQsMElBQTBJO0lBQzFJLGdIQUFnSDtJQUNoSCxtSUFBbUk7SUFDbkksd0RBQXdEO0lBQ3hELHFEQUFxRDtJQUNyRCxNQUFNLFNBQVMsR0FBZSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUV4RCxhQUFhO0lBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QixZQUFZLENBQUMsTUFBTSxFQUFFLEdBQW1CLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsWUFBWSxDQUFDLE1BQU0sR0FBRyxHQUFtQixNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksY0FBTSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLENBQUM7UUFDRyxNQUFNLENBQUMsR0FBcUIsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQVUsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsR0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFXLEdBQUcsQ0FBQztRQUN4RSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDMUIsQ0FBQztZQUNHLE1BQU0sU0FBUyxHQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNoRCxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUMsRUFBRSxDQUFDLEtBQUssR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzdJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQXlCLFNBQVMsQ0FBQyxDQUFDO1lBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDO1lBQzlJLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQ0FBb0QsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxHQUFDLE9BQU8sQ0FBQztZQUM3SyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksY0FBTSxDQUFDLENBQUMsR0FBQyxF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QUFFLENBQUMsQ0FDckQsQ0FBQztnQkFDRyxXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBTSx1REFBdUQ7UUFDMUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDN0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFD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 \ No newline at end of file diff --git a/imgui_demo.ts b/imgui_demo.ts new file mode 100644 index 0000000..c7fe652 --- /dev/null +++ b/imgui_demo.ts @@ -0,0 +1,3151 @@ +// dear imgui, v1.53 +// (demo code) + +// Message to the person tempted to delete this file when integrating ImGui into their code base: +// Don't do it! Do NOT remove this file from your project! It is useful reference code that you and other users will want to refer to. +// Everything in this file will be stripped out by the linker if you don't call ImGui.ShowDemoWindow(). +// During development, you can call ImGui.ShowDemoWindow() in your code to learn about various features of ImGui. Have it wired in a debug menu! +// Removing this file from your project is hindering access to documentation for everyone in your team, likely leading you to poorer usage of the library. +// Note that you can #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h for the same effect. +// If you want to link core ImGui in your final builds but not those demo windows, #define IMGUI_DISABLE_DEMO_WINDOWS in imconfig.h and those functions will be empty. +// In other situation, when you have ImGui available you probably want this to be available for reference and execution. +// Thank you, +// -Your beloved friend, imgui_demo.cpp (that you won't delete) + +// Message to beginner C/C++ programmers. About the meaning of 'static': in this demo code, we frequently we use 'static' variables inside functions. +// We do this as a way to gather code and data in the same place, just to make the demo code faster to read, faster to write, and use less code. +// A static variable persist across calls, so it is essentially like a global variable but declared inside the scope of the function. +// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be reentrant or used in threads. +// This might be a pattern you occasionally want to use in your code, but most of the real data you would be editing is likely to be stored outside your function. + +// #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +// #define _CRT_SECURE_NO_WARNINGS +// #endif + +// #include "imgui.h" +// #include // toupper, isprint +// #include // sqrtf, powf, cosf, sinf, floorf, ceilf +// #include // vsnprintf, sscanf, printf +// #include // null, malloc, free, atoi +// #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier +// #include // intptr_t +// #else +// #include // intptr_t +// #endif + +import * as ImGui from "./imgui"; +import { IMGUI_VERSION } from "./imgui"; +import { IM_ASSERT } from "./imgui"; +import { IM_ARRAYSIZE } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImAccess } from "./imgui"; +import { ImScalar } from "./imgui"; +import { ImTuple2 } from "./imgui"; +import { ImTuple3 } from "./imgui"; +import { ImTuple4 } from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiColorEditFlags } from "./imgui"; +import { ImGuiCond } from "./imgui"; +import { ImGuiFocusedFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImGuiInputTextFlags } from "./imgui" +import { ImGuiMouseCursor } from "./imgui"; +import { ImGuiSelectableFlags } from "./imgui"; +import { ImGuiStyleVar } from "./imgui"; +import { ImGuiTreeNodeFlags } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; +import { ImGuiSizeConstraintCallbackData } from "./imgui"; +import { ImDrawCornerFlags } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVector } from "./imgui"; +import { interface_ImVec2, ImVec2 } from "./imgui"; +import { interface_ImVec4, ImVec4 } from "./imgui"; +import { IM_COL32 } from "./imgui"; +import { ImColor } from "./imgui"; +import { ImGuiIO } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextFilter } from "./imgui"; +import { ImGuiTextBuffer } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImFont } from "./imgui"; +import { ImFontAtlas } from "./imgui"; + +// #ifdef _MSC_VER +// #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen +// #define snprintf _snprintf +// #endif +// #ifdef __clang__ +// #pragma clang diagnostic ignored "-Wold-style-cast" // warning : use of old-style cast // yes, they are more terse. +// #pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code) +// #pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning : cast to 'void *' from smaller integer type 'int' +// #pragma clang diagnostic ignored "-Wformat-security" // warning : warning: format string is not a string literal +// #pragma clang diagnostic ignored "-Wexit-time-destructors" // warning : declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals. +// #if __has_warning("-Wreserved-id-macro") +// #pragma clang diagnostic ignored "-Wreserved-id-macro" // warning : macro name is a reserved identifier // +// #endif +// #elif defined(__GNUC__) +// #pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size +// #pragma GCC diagnostic ignored "-Wformat-security" // warning : format string is not a string literal (potentially insecure) +// #pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function +// #pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value +// #if (__GNUC__ >= 6) +// #pragma GCC diagnostic ignored "-Wmisleading-indentation" // warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub. +// #endif +// #endif + +// Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. +// #ifdef _WIN32 +// #define IM_NEWLINE "\r\n" +// #else +// #define IM_NEWLINE "\n" +// #endif +const IM_NEWLINE: string = "\n"; + +// #define IM_MAX(_A,_B) (((_A) >= (_B)) ? (_A) : (_B)) +function IM_MAX(_A: number, _B: number): number { return ((_A) >= (_B)) ? (_A) : (_B); } + +//----------------------------------------------------------------------------- +// DEMO CODE +//----------------------------------------------------------------------------- + +// #if !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && defined(IMGUI_DISABLE_TEST_WINDOWS) && !defined(IMGUI_DISABLE_DEMO_WINDOWS) // Obsolete name since 1.53, TEST->DEMO +// #define IMGUI_DISABLE_DEMO_WINDOWS +// #endif + +// #if !defined(IMGUI_DISABLE_DEMO_WINDOWS) + +class Static { + constructor(public value: T) {} +} + +const _static: {[key: string]: Static} = {}; + +function STATIC(key: string, value: T): Static { + return _static[key] || (_static[key] = new Static(value)); +} + +// static void ShowExampleAppConsole(bool* p_open); +// static void ShowExampleAppLog(bool* p_open); +// static void ShowExampleAppLayout(bool* p_open); +// static void ShowExampleAppPropertyEditor(bool* p_open); +// static void ShowExampleAppLongText(bool* p_open); +// static void ShowExampleAppAutoResize(bool* p_open); +// static void ShowExampleAppConstrainedResize(bool* p_open); +// static void ShowExampleAppFixedOverlay(bool* p_open); +// static void ShowExampleAppWindowTitles(bool* p_open); +// static void ShowExampleAppCustomRendering(bool* p_open); +// static void ShowExampleAppMainMenuBar(); +// static void ShowExampleMenuFile(); + +function ShowHelpMarker(desc: string): void +{ + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.PushTextWrapPos(450.0); + ImGui.TextUnformatted(desc); + ImGui.PopTextWrapPos(); + ImGui.EndTooltip(); + } +} + +export function ShowUserGuide(): void +{ + ImGui.BulletText("Double-click on title bar to collapse window."); + ImGui.BulletText("Click and drag on lower right corner to resize window\n(double-click to auto fit window to its contents)."); + ImGui.BulletText("Click and drag on any empty space to move window."); + ImGui.BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields."); + ImGui.BulletText("CTRL+Click on a slider or drag box to input value as text."); + if (ImGui.GetIO().FontAllowUserScaling) + ImGui.BulletText("CTRL+Mouse Wheel to zoom window contents."); + ImGui.BulletText("Mouse Wheel to scroll."); + ImGui.BulletText("While editing text:\n"); + ImGui.Indent(); + ImGui.BulletText("Hold SHIFT or use mouse to select text."); + ImGui.BulletText("CTRL+Left/Right to word jump."); + ImGui.BulletText("CTRL+A or double-click to select all."); + ImGui.BulletText("CTRL+X,CTRL+C,CTRL+V to use clipboard."); + ImGui.BulletText("CTRL+Z,CTRL+Y to undo/redo."); + ImGui.BulletText("ESCAPE to revert."); + ImGui.BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract."); + ImGui.Unindent(); +} + +// Demonstrate most ImGui features (big function!) +export function ShowDemoWindow(p_open: ImAccess | ImScalar | null = null): void +{ + // Examples apps + /* static */ const show_app_main_menu_bar: Static = STATIC("show_app_main_menu_bar", false); + /* static */ const show_app_console: Static = STATIC("show_app_console", false); + /* static */ const show_app_log: Static = STATIC("show_app_log", false); + /* static */ const show_app_layout: Static = STATIC("show_app_layout", false); + /* static */ const show_app_property_editor: Static = STATIC("show_app_property_editor", false); + /* static */ const show_app_long_text: Static = STATIC("show_app_long_text", false); + /* static */ const show_app_auto_resize: Static = STATIC("show_app_auto_resize", false); + /* static */ const show_app_constrained_resize: Static = STATIC("show_app_constrained_resize", false); + /* static */ const show_app_fixed_overlay: Static = STATIC("show_app_fixed_overlay", false); + /* static */ const show_app_window_titles: Static = STATIC("show_app_window_titles", false); + /* static */ const show_app_custom_rendering: Static = STATIC("show_app_custom_rendering", false); + /* static */ const show_app_style_editor: Static = STATIC("show_app_style_editor", false); + + /* static */ const show_app_metrics: Static = STATIC("show_app_metrics", false); + /* static */ const show_app_about: Static = STATIC("show_app_about", false); + + if (show_app_main_menu_bar.value) ShowExampleAppMainMenuBar(); + if (show_app_console.value) ShowExampleAppConsole((value = show_app_console.value) => show_app_console.value = value); + if (show_app_log.value) ShowExampleAppLog((value = show_app_log.value) => show_app_log.value = value); + if (show_app_layout.value) ShowExampleAppLayout((value = show_app_layout.value) => show_app_layout.value = value); + if (show_app_property_editor.value) ShowExampleAppPropertyEditor((value = show_app_property_editor.value) => show_app_property_editor.value = value); + if (show_app_long_text.value) ShowExampleAppLongText((value = show_app_long_text.value) => show_app_long_text.value = value); + if (show_app_auto_resize.value) ShowExampleAppAutoResize((value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + if (show_app_constrained_resize.value) ShowExampleAppConstrainedResize((value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + if (show_app_fixed_overlay.value) ShowExampleAppFixedOverlay((value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + if (show_app_window_titles.value) ShowExampleAppWindowTitles((value = show_app_window_titles.value) => show_app_window_titles.value = value); + if (show_app_custom_rendering.value) ShowExampleAppCustomRendering((value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + + if (show_app_metrics.value) { ImGui.ShowMetricsWindow((value = show_app_metrics.value) => show_app_metrics.value = value); } + if (show_app_style_editor.value) { ImGui.Begin("Style Editor", (value = show_app_style_editor.value) => show_app_style_editor.value = value); /*ImGui.*/ShowStyleEditor(); ImGui.End(); } + if (show_app_about.value) + { + ImGui.Begin("About Dear ImGui", (value = show_app_about.value) => show_app_about.value = value, ImGui.WindowFlags.AlwaysAutoResize); + ImGui.Text(`dear imgui, ${ImGui.GetVersion()}`); + ImGui.Separator(); + ImGui.Text("By Omar Cornut and all dear imgui contributors."); + ImGui.Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); + ImGui.End(); + } + + /* static */ const no_titlebar: Static = STATIC("no_titlebar", false); + /* static */ const no_scrollbar: Static = STATIC("no_scrollbar", false); + /* static */ const no_menu: Static = STATIC("no_menu", false); + /* static */ const no_move: Static = STATIC("no_move", false); + /* static */ const no_resize: Static = STATIC("no_resize", false); + /* static */ const no_collapse: Static = STATIC("no_collapse", false); + /* static */ const no_close: Static = STATIC("no_close", false); + + // Demonstrate the various window flags. Typically you would just use the default. + let window_flags: ImGui.WindowFlags = 0; + if (no_titlebar.value) window_flags |= ImGuiWindowFlags.NoTitleBar; + if (no_scrollbar.value) window_flags |= ImGuiWindowFlags.NoScrollbar; + if (!no_menu.value) window_flags |= ImGuiWindowFlags.MenuBar; + if (no_move.value) window_flags |= ImGuiWindowFlags.NoMove; + if (no_resize.value) window_flags |= ImGuiWindowFlags.NoResize; + if (no_collapse.value) window_flags |= ImGuiWindowFlags.NoCollapse; + if (no_close.value) p_open = null; // Don't pass our bool* to Begin + + ImGui.SetNextWindowSize(new ImVec2(550,680), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("ImGui Demo", p_open, window_flags)) + { + // Early out if the window is collapsed, as an optimization. + ImGui.End(); + return; + } + + //ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65); // 2/3 of the space for widget and 1/3 for labels + ImGui.PushItemWidth(-140); // Right align, keep 140 pixels for labels + + ImGui.Text(`dear imgui says hello. (${IMGUI_VERSION})`); + + // Menu + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("Menu")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Examples")) + { + ImGui.MenuItem("Main menu bar", null, (value = show_app_main_menu_bar.value) => show_app_main_menu_bar.value = value); + ImGui.MenuItem("Console", null, (value = show_app_console.value) => show_app_console.value = value); + ImGui.MenuItem("Log", null, (value = show_app_log.value) => show_app_log.value = value); + ImGui.MenuItem("Simple layout", null, (value = show_app_layout.value) => show_app_layout.value = value); + ImGui.MenuItem("Property editor", null, (value = show_app_property_editor.value) => show_app_property_editor.value = value); + ImGui.MenuItem("Long text display", null, (value = show_app_long_text.value) => show_app_long_text.value = value); + ImGui.MenuItem("Auto-resizing window", null, (value = show_app_auto_resize.value) => show_app_auto_resize.value = value); + ImGui.MenuItem("Constrained-resizing window", null, (value = show_app_constrained_resize.value) => show_app_constrained_resize.value = value); + ImGui.MenuItem("Simple overlay", null, (value = show_app_fixed_overlay.value) => show_app_fixed_overlay.value = value); + ImGui.MenuItem("Manipulating window titles", null, (value = show_app_window_titles.value) => show_app_window_titles.value = value); + ImGui.MenuItem("Custom rendering", null, (value = show_app_custom_rendering.value) => show_app_custom_rendering.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Help")) + { + ImGui.MenuItem("Metrics", null, (value = show_app_metrics.value) => show_app_metrics.value = value); + ImGui.MenuItem("Style Editor", null, (value = show_app_style_editor.value) => show_app_style_editor.value = value); + ImGui.MenuItem("About Dear ImGui", null, (value = show_app_about.value) => show_app_about.value = value); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + ImGui.Spacing(); + if (ImGui.CollapsingHeader("Help")) + { + ImGui.TextWrapped("This window is being created by the ShowDemoWindow() function. Please refer to the code in imgui_demo.ts for reference.\n\n"); + ImGui.Text("USER GUIDE:"); + /*ImGui.*/ShowUserGuide(); + } + + if (ImGui.CollapsingHeader("Window options")) + { + ImGui.Checkbox("No titlebar", (value = no_titlebar.value) => no_titlebar.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No scrollbar", (value = no_scrollbar.value) => no_scrollbar.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No menu", (value = no_menu.value) => no_menu.value = value); + ImGui.Checkbox("No move", (value = no_move.value) => no_move.value = value); ImGui.SameLine(150); + ImGui.Checkbox("No resize", (value = no_resize.value) => no_resize.value = value); ImGui.SameLine(300); + ImGui.Checkbox("No collapse", (value = no_collapse.value) => no_collapse.value = value); + ImGui.Checkbox("No close", (value = no_close.value) => no_close.value = value); + + if (ImGui.TreeNode("Style")) + { + /*ImGui.*/ShowStyleEditor(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Capture/Logging")) + { + ImGui.TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output."); + ImGui.LogButtons(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Widgets")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const clicked: Static = STATIC("clicked", 0); + if (ImGui.Button("Button")) + clicked.value++; + if (clicked.value & 1) + { + ImGui.SameLine(); + ImGui.Text("Thanks for clicking me!"); + } + + /* static */ const check: Static = STATIC("check", true); + ImGui.Checkbox("checkbox", (value = check.value) => check.value = value); + + /* static */ const e: Static = STATIC("e", 0); + ImGui.RadioButton("radio a", (value = e.value) => e.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("radio b", (value = e.value) => e.value = value, 1); ImGui.SameLine(); + ImGui.RadioButton("radio c", (value = e.value) => e.value = value, 2); + + // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style. + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(i/7.0, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(i/7.0, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(i/7.0, 0.8, 0.8)); + ImGui.Button("Click"); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + + ImGui.Text("Hover over me"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip"); + + ImGui.SameLine(); + ImGui.Text("- or me"); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + ImGui.Text("I am a fancy tooltip"); + /* static */ const arr: Static = STATIC("arr_", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + // ImGui.PlotLines("Curve", arr, IM_ARRAYSIZE(arr)); + ImGui.PlotLines_Array("Curve", arr.value, IM_ARRAYSIZE(arr.value)); + ImGui.EndTooltip(); + } + + // Testing ImGuiOnceUponAFrame helper. + //static ImGuiOnceUponAFrame once; + //for (let i = 0; i < 5; i++) + // if (once) + // ImGui.Text("This will be displayed only once."); + + ImGui.Separator(); + + ImGui.LabelText("label", "Value"); + + { + // Simplified one-liner Combo() API, using values packed in a single constant string + /* static */ const current_item_1: Static = STATIC("current_item_1", 1); + ImGui.Combo("combo", (value = current_item_1.value) => current_item_1.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + //ImGui.Combo("combo w/ array of char*", ¤t_item_2_idx, items, IM_ARRAYSIZE(items)); // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. + + // General BeginCombo() API, you have full control over your selection data and display type + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" ]; + /* static */ const current_item_2: Static = STATIC("current_item_2", null); + if (ImGui.BeginCombo("combo 2", current_item_2.value)) // The second parameter is the label previewed before opening the combo. + { + for (let n = 0; n < IM_ARRAYSIZE(items); n++) + { + const is_selected: boolean = (current_item_2.value === items[n]); // You can store your selection however you want, outside or inside your objects + if (ImGui.Selectable(items[n], is_selected)) + current_item_2.value = items[n]; + if (is_selected) + ImGui.SetItemDefaultFocus(); // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch) + } + ImGui.EndCombo(); + } + } + + { + /* static */ const str0: Static = STATIC("str0", new ImStringBuffer(128, "Hello, world!")); + /* static */ const i0: Static = STATIC("i0", 123); + /* static */ const f0: Static = STATIC("f0#400", 0.001); + ImGui.InputText("input text", str0.value, IM_ARRAYSIZE(str0.value)); + ImGui.SameLine(); ShowHelpMarker("Hold SHIFT or use mouse to select text.\n" + "CTRL+Left/Right to word jump.\n" + "CTRL+A or double-click to select all.\n" + "CTRL+X,CTRL+C,CTRL+V clipboard.\n" + "CTRL+Z,CTRL+Y undo/redo.\n" + "ESCAPE to revert.\n"); + + ImGui.InputInt("input int", (value = i0.value) => i0.value = value); + ImGui.SameLine(); ShowHelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n"); + + ImGui.InputFloat("input float", (value = f0.value) => f0.value = value, 0.01, 1.0); + + /* static */ const vec4a: Static> = STATIC>("vec4a", [ 0.10, 0.20, 0.30, 0.44 ]); + ImGui.InputFloat3("input float3", vec4a.value); + } + + { + /* static */ const i1: Static = STATIC("i1#415", 50), i2: Static = STATIC("i2#415", 42); + ImGui.DragInt("drag int", (value = i1.value) => i1.value = value, 1); + ImGui.SameLine(); ShowHelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value."); + + ImGui.DragInt("drag int 0..100", (value = i2.value) => i2.value = value, 1, 0, 100, "%.0f%%"); + + /* static */ const f1: Static = STATIC("f1#421", 1.00), f2: Static = STATIC("f2#421", 0.0067); + ImGui.DragFloat("drag float", (value = f1.value) => f1.value = value, 0.005); + ImGui.DragFloat("drag small float", (value = f2.value) => f2.value = value, 0.0001, 0.0, 0.0, "%.06f ns"); + } + + { + /* static */ const i1: Static = STATIC("i1#427", 0); + ImGui.SliderInt("slider int", (value = i1.value) => i1.value = value, -1, 3); + ImGui.SameLine(); ShowHelpMarker("CTRL+click to input value."); + + /* static */ const f1: Static = STATIC("f1#427", 0.123), f2: Static = STATIC("f2#427", 0.0); + ImGui.SliderFloat("slider float", (value = f1.value) => f1.value = value, 0.0, 1.0, "ratio = %.3f"); + ImGui.SliderFloat("slider log float", (value = f2.value) => f2.value = value, -10.0, 10.0, "%.4f", 3.0); + /* static */ const angle: Static = STATIC("angle", 0.0); + ImGui.SliderAngle("slider angle", (value = angle.value) => angle.value = value); + } + + /* static */ const col1: Static> = STATIC>("col1", [ 1.0,0.0,0.2 ]); + /* static */ const col2: Static> = STATIC>("col2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit3("color 1", col1.value); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n"); + + ImGui.ColorEdit4("color 2", col2.value); + + const listbox_items: string[] = [ "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" ]; + /* static */ const listbox_item_current: Static = STATIC("listbox_item_current", 1); + ImGui.ListBox("listbox\n(single select)", (value = listbox_item_current.value) => listbox_item_current.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + + /* static */ const listbox_item_current2: Static = STATIC("listbox_item_current2", 2); + ImGui.PushItemWidth(-1); + ImGui.ListBox("##listbox2", (value = listbox_item_current2.value) => listbox_item_current2.value = value, listbox_items, IM_ARRAYSIZE(listbox_items), 4); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Trees")) + { + if (ImGui.TreeNode("Basic trees")) + { + for (let i = 0; i < 5; i++) + if (ImGui.TreeNode(i.toString(), `Child ${i}`)) + { + ImGui.Text("blah blah"); + ImGui.SameLine(); + if (ImGui.SmallButton("print")) console.log(`Child ${i} pressed`); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Advanced, with Selectable nodes")) + { + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + /* static */ const align_label_with_current_x_position: Static = STATIC("align_label_with_current_x_position", false); + ImGui.Checkbox("Align label with current X position)", (value = align_label_with_current_x_position.value) => align_label_with_current_x_position.value = value); + ImGui.Text("Hello!"); + if (align_label_with_current_x_position.value) + ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing()); + + /* static */ const selection_mask: Static = STATIC("selection_mask", (1 << 2)); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + let node_clicked: number = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui.PushStyleVar(ImGuiStyleVar.IndentSpacing, ImGui.GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. + for (let i = 0; i < 6; i++) + { + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + let node_flags: ImGuiTreeNodeFlags = ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.OpenOnDoubleClick | ((selection_mask.value & (1 << i)) ? ImGuiTreeNodeFlags.Selected : 0); + if (i < 3) + { + // Node + const node_open: boolean = ImGui.TreeNodeEx(i, node_flags, `Selectable Node ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui.Text("Blah blah\nBlah Blah"); + ImGui.TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + node_flags |= ImGuiTreeNodeFlags.Leaf | ImGuiTreeNodeFlags.NoTreePushOnOpen; // ImGuiTreeNodeFlags.Bullet + ImGui.TreeNodeEx(i, node_flags, `Selectable Leaf ${i}`); + if (ImGui.IsItemClicked()) + node_clicked = i; + } + } + if (node_clicked !== -1) + { + // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. + if (ImGui.GetIO().KeyCtrl) + selection_mask.value ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask.value = (1 << node_clicked); // Click to single-select + } + ImGui.PopStyleVar(); + if (align_label_with_current_x_position) + ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing()); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Collapsing Headers")) + { + /* static */ const closable_group: Static = STATIC("closable_group", true); + ImGui.Checkbox("Enable extra group", (value = closable_group.value) => closable_group.value = value); + if (ImGui.CollapsingHeader("Header")) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`Some content ${i}`); + } + if (ImGui.CollapsingHeader("Header with a close button", (value = closable_group.value) => closable_group.value = value)) + { + ImGui.Text(`IsItemHovered: ${ImGui.IsItemHovered()}`); + for (let i = 0; i < 5; i++) + ImGui.Text(`More content ${i}`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Bullets")) + { + ImGui.BulletText("Bullet point 1"); + ImGui.BulletText("Bullet point 2\nOn multiple lines"); + ImGui.Bullet(); ImGui.Text("Bullet point 3 (two calls)"); + ImGui.Bullet(); ImGui.SmallButton("Button"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text")) + { + if (ImGui.TreeNode("Colored Text")) + { + // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. + ImGui.TextColored(new ImVec4(1.0,0.0,1.0,1.0), "Pink"); + ImGui.TextColored(new ImVec4(1.0,1.0,0.0,1.0), "Yellow"); + ImGui.TextDisabled("Disabled"); + ImGui.SameLine(); ShowHelpMarker("The TextDisabled color is stored in ImGuiStyle."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Word Wrapping")) + { + // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility. + ImGui.TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages."); + ImGui.Spacing(); + + /* static */ const wrap_width: Static = STATIC("wrap_width", 200.0); + ImGui.SliderFloat("Wrap width", (value = wrap_width.value) => wrap_width.value = value, -20, 600, "%.0f"); + + ImGui.Text("Test paragraph 1:"); + let pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text(`The lazy dog is a good dog. This paragraph is made to fit within ${wrap_width.value.toFixed(0)} pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.`); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.Text("Test paragraph 2:"); + pos = ImGui.GetCursorScreenPos(); + ImGui.GetWindowDrawList().AddRectFilled(new ImVec2(pos.x + wrap_width.value, pos.y), new ImVec2(pos.x + wrap_width.value + 10, pos.y + ImGui.GetTextLineHeight()), IM_COL32(255,0,255,255)); + ImGui.PushTextWrapPos(ImGui.GetCursorPos().x + wrap_width.value); + ImGui.Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh"); + ImGui.GetWindowDrawList().AddRect(ImGui.GetItemRectMin(), ImGui.GetItemRectMax(), IM_COL32(255,255,0,255)); + ImGui.PopTextWrapPos(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("UTF-8 Text")) + { + // UTF-8 test with Japanese characters + // (needs a suitable font, try Arial Unicode or M+ fonts http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html) + // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8 + // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature') + // - HOWEVER, FOR THIS DEMO FILE, BECAUSE WE WANT TO SUPPORT COMPILER, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE. + // Instead we are encoding a few string with hexadecimal constants. Don't do this in your application! + // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. + ImGui.TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges."); + ImGui.Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); + ImGui.Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); + /* static */ const buf: Static = STATIC("buf", new ImStringBuffer(32, "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e")); // "nihongo" + ImGui.InputText("UTF-8 input", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Images")) + { + ImGui.TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!"); + const io: ImGuiIO = ImGui.GetIO(); + + // Here we are grabbing the font texture because that's the only one we have access to inside the demo code. + // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure. + // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID. + // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_glfw_gl3.cpp renderer expect a GLuint OpenGL texture identifier etc.) + // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui.Image(), and gather width/height through your own functions, etc. + // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this. + // Consider using the lower-level ImDrawList::AddImage() API, via ImGui.GetWindowDrawList()->AddImage(). + const my_tex_id: WebGLTexture | null = io.Fonts.TexID; + const my_tex_w: number = io.Fonts.TexWidth; + const my_tex_h: number = io.Fonts.TexHeight; + + ImGui.Text(`${my_tex_w.toFixed(0)}x${my_tex_h.toFixed(0)}`); + const pos: Readonly = ImGui.GetCursorScreenPos(); + ImGui.Image(my_tex_id, new ImVec2(my_tex_w, my_tex_h), new ImVec2(0,0), new ImVec2(1,1), new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + if (ImGui.IsItemHovered()) + { + ImGui.BeginTooltip(); + const focus_sz: number = 32.0; + let focus_x = io.MousePos.x - pos.x - focus_sz * 0.5; if (focus_x < 0.0) focus_x = 0.0; else if (focus_x > my_tex_w - focus_sz) focus_x = my_tex_w - focus_sz; + let focus_y = io.MousePos.y - pos.y - focus_sz * 0.5; if (focus_y < 0.0) focus_y = 0.0; else if (focus_y > my_tex_h - focus_sz) focus_y = my_tex_h - focus_sz; + ImGui.Text(`Min: (${focus_x.toFixed(2)}, ${focus_y.toFixed(2)})`); + ImGui.Text(`Max: (${(focus_x + focus_sz).toFixed(2)}, ${(focus_y + focus_sz).toFixed(2)})`); + const uv0: ImVec2 = new ImVec2((focus_x) / my_tex_w, (focus_y) / my_tex_h); + const uv1: ImVec2 = new ImVec2((focus_x + focus_sz) / my_tex_w, (focus_y + focus_sz) / my_tex_h); + // ImGui.Image(my_tex_id, ImVec2(128,128), uv0, uv1, ImColor(255,255,255,255), ImColor(255,255,255,128)); + ImGui.Image(my_tex_id, new ImVec2(128,128), uv0, uv1, new ImVec4(1.0,1.0,1.0,1.0), new ImVec4(1.0,1.0,1.0,0.5)); + ImGui.EndTooltip(); + } + ImGui.TextWrapped("And now some textured buttons.."); + /* static */ const pressed_count: Static = STATIC("pressed_count", 0); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); + let frame_padding: number = -1 + i; // -1 = uses default padding + if (ImGui.ImageButton(my_tex_id, new ImVec2(32,32), new ImVec2(0,0), new ImVec2(32.0/my_tex_w,32/my_tex_h), frame_padding, new ImVec4(0,0,0,1))) + pressed_count.value += 1; + ImGui.PopID(); + ImGui.SameLine(); + } + ImGui.NewLine(); + ImGui.Text(`Pressed ${pressed_count} times.`); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Selectables")) + { + if (ImGui.TreeNode("Basic")) + { + /* static */ const selected: Static = STATIC("selected#672", [ false, true, false, false ]); + ImGui.Selectable("1. I am selectable", (value = selected.value[0]) => selected.value[0] = value); + ImGui.Selectable("2. I am selectable", (value = selected.value[1]) => selected.value[1] = value); + ImGui.Text("3. I am not selectable"); + ImGui.Selectable("4. I am selectable", (value = selected.value[2]) => selected.value[2] = value); + if (ImGui.Selectable("5. I am double clickable", selected.value[3], ImGuiSelectableFlags.AllowDoubleClick)) + if (ImGui.IsMouseDoubleClicked(0)) + selected.value[3] = !selected.value[3]; + ImGui.TreePop(); + } + if (ImGui.TreeNode("Rendering more text into the same block")) + { + /* static */ const selected: Static = STATIC("selected#687", [ false, false, false ]); + ImGui.Selectable("main.c", (value = selected.value[0]) => selected.value[0] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.Selectable("Hello.cpp", (value = selected.value[1]) => selected.value[1] = value); ImGui.SameLine(300); ImGui.Text("12,345 bytes"); + ImGui.Selectable("Hello.h", (value = selected.value[2]) => selected.value[2] = value); ImGui.SameLine(300); ImGui.Text(" 2,345 bytes"); + ImGui.TreePop(); + } + if (ImGui.TreeNode("In columns")) + { + ImGui.Columns(3, null, false); + /* static */ const selected: Static = STATIC("selected#699", new Array(16).fill(false)); + for (let i = 0; i < 16; i++) + { + const label: string = `Item ${i}`; + if (ImGui.Selectable(label, (value = selected.value[i]) => selected.value[i] = value)) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.TreePop(); + } + if (ImGui.TreeNode("Grid")) + { + /* static */ const selected: Static = STATIC("selected#712", [ true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true ]); + for (let i = 0; i < 16; i++) + { + ImGui.PushID(i); + if (ImGui.Selectable("Sailor", (value = selected.value[i]) => selected.value[i] = value, 0, new ImVec2(50,50))) + { + let x: number = i % 4, y: number = i / 4; + if (x > 0) selected.value[i - 1] = !selected.value[i - 1]; + if (x < 3) selected.value[i + 1] = !selected.value[i + 1]; + if (y > 0) selected.value[i - 4] = !selected.value[i - 4]; + if (y < 3) selected.value[i + 4] = !selected.value[i + 4]; + } + if ((i % 4) < 3) ImGui.SameLine(); + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Filtered Text Input")) + { + /* static */ const buf1: Static = STATIC("buf1", new ImStringBuffer(64, "")); ImGui.InputText("default", buf1.value, IM_ARRAYSIZE(buf1.value)); + /* static */ const buf2: Static = STATIC("buf2", new ImStringBuffer(64, "")); ImGui.InputText("decimal", buf2.value, IM_ARRAYSIZE(buf2.value), ImGuiInputTextFlags.CharsDecimal); + /* static */ const buf3: Static = STATIC("buf3", new ImStringBuffer(64, "")); ImGui.InputText("hexadecimal", buf3.value, IM_ARRAYSIZE(buf3.value), ImGuiInputTextFlags.CharsHexadecimal | ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf4: Static = STATIC("buf4", new ImStringBuffer(64, "")); ImGui.InputText("uppercase", buf4.value, IM_ARRAYSIZE(buf4.value), ImGuiInputTextFlags.CharsUppercase); + /* static */ const buf5: Static = STATIC("buf5", new ImStringBuffer(64, "")); ImGui.InputText("no blank", buf5.value, IM_ARRAYSIZE(buf5.value), ImGuiInputTextFlags.CharsNoBlank); + class TextFilters { public static FilterImGuiLetters(data: ImGuiTextEditCallbackData): number { if (data.EventChar < 256 && /[imgui]/.test(String.fromCharCode(data.EventChar))) return 0; return 1; } } + /* static */ const buf6: Static = STATIC("buf6", new ImStringBuffer(64, "")); ImGui.InputText("\"imgui\" letters", buf6.value, IM_ARRAYSIZE(buf6.value), ImGuiInputTextFlags.CallbackCharFilter, TextFilters.FilterImGuiLetters); + + ImGui.Text("Password input"); + /* static */ const bufpass: Static = STATIC("bufpass", new ImStringBuffer(64, "password123")); + ImGui.InputText("password", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.Password | ImGuiInputTextFlags.CharsNoBlank); + ImGui.SameLine(); ShowHelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n"); + ImGui.InputText("password (clear)", bufpass.value, IM_ARRAYSIZE(bufpass.value), ImGuiInputTextFlags.CharsNoBlank); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-line Text Input")) + { + /* static */ const read_only: Static = STATIC("read_only", false); + /* static */ const text: Static = STATIC("text", new ImStringBuffer(1024*16, + "/*\n" + + " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n" + + " the hexadecimal encoding of one offending instruction,\n" + + " more formally, the invalid operand with locked CMPXCHG8B\n" + + " instruction bug, is a design flaw in the majority of\n" + + " Intel Pentium, Pentium MMX, and Pentium OverDrive\n" + + " processors (all in the P5 microarchitecture).\n" + + "*/\n\n" + + "label:\n" + + "\tlock cmpxchg8b eax\n")); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Read-only", (value = read_only.value) => read_only.value = value); + ImGui.PopStyleVar(); + ImGui.InputTextMultiline("##source", text.value, IM_ARRAYSIZE(text.value), new ImVec2(-1.0, ImGui.GetTextLineHeight() * 16), ImGuiInputTextFlags.AllowTabInput | (read_only.value ? ImGuiInputTextFlags.ReadOnly : 0)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Plots widgets")) + { + /* static */ const animate: Static = STATIC("animate", true); + ImGui.Checkbox("Animate", (value = animate.value) => animate.value = value); + + /* static */ const arr: Static = STATIC("arr", [ 0.6, 0.1, 1.0, 0.5, 0.92, 0.1, 0.2 ]); + ImGui.PlotLines_Array("Frame Times", arr.value, IM_ARRAYSIZE(arr.value)); + + // Create a dummy array of contiguous float values to plot + // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter. + /* static */ const values: Static = STATIC("values#803", new Array(90).fill(0)); + /* static */ const values_offset: Static = STATIC("values_offset", 0); + /* static */ const refresh_time: Static = STATIC("refresh_time", 0.0); + if (!animate.value || refresh_time.value === 0.0) + refresh_time.value = ImGui.GetTime(); + while (refresh_time.value < ImGui.GetTime()) // Create dummy data at fixed 60 hz rate for the demo + { + /* static */ const phase: Static = STATIC("phase", 0.0); + values.value[values_offset.value] = Math.cos(phase.value); + values_offset.value = (values_offset.value+1) % IM_ARRAYSIZE(values.value); + phase.value += 0.10*values_offset.value; + refresh_time.value += 1.0/60.0; + } + ImGui.PlotLines_Array("Lines", values.value, IM_ARRAYSIZE(values.value), values_offset.value, "avg 0.0", -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram_Array("Histogram", arr.value, IM_ARRAYSIZE(arr.value), 0, null, 0.0, 1.0, new ImVec2(0,80)); + + // Use functions to generate output + // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count. + class Funcs + { + public static Sin(data: any, i: number): number { return Math.sin(i * 0.1); } + public static Saw(data: any, i: number): number { return (i & 1) ? 1.0 : -1.0; } + } + /* static */ const func_type: Static = STATIC("func_type", 0), display_count: Static = STATIC("display_count", 70); + ImGui.Separator(); + ImGui.PushItemWidth(100); ImGui.Combo("func", (value = func_type.value) => func_type.value = value, "Sin\0Saw\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); + ImGui.SliderInt("Sample count", (value = display_count.value) => display_count.value = value, 1, 400); + const func: (data: any, i: number) => number = (func_type.value === 0) ? Funcs.Sin : Funcs.Saw; + ImGui.PlotLines("Lines", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.PlotHistogram("Histogram", func, null, display_count.value, 0, null, -1.0, 1.0, new ImVec2(0,80)); + ImGui.Separator(); + + // Animate a simple progress bar + /* static */ const progress: Static = STATIC("progress", 0.0), progress_dir: Static = STATIC("progress_dir", 1.0); + if (animate.value) + { + progress.value += progress_dir.value * 0.4 * ImGui.GetIO().DeltaTime; + if (progress.value >= +1.1) { progress.value = +1.1; progress_dir.value *= -1.0; } + if (progress.value <= -0.1) { progress.value = -0.1; progress_dir.value *= -1.0; } + } + + // Typically we would use ImVec2(-1.0f,0.0) to use all available width, or ImVec2(width,0.0) for a specified width. ImVec2(0.0,0.0) uses ItemWidth. + ImGui.ProgressBar(progress.value, new ImVec2(0.0,0.0)); + ImGui.SameLine(0.0, ImGui.GetStyle().ItemInnerSpacing.x); + ImGui.Text("Progress Bar"); + + const progress_saturated: number = (progress.value < 0.0) ? 0.0 : (progress.value > 1.0) ? 1.0 : progress.value; + const buf: string = `${(progress_saturated*1753).toFixed(0)}/${1753}`; + ImGui.ProgressBar(progress.value, new ImVec2(0.,0.), buf); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Color/Picker Widgets")) + { + /* static */ const color: Static = STATIC("color#863", new ImColor(114, 144, 154, 200).toImVec4()); + + /* static */ const hdr: Static = STATIC("hdr", false); + /* static */ const alpha_preview: Static = STATIC("alpha_preview", true); + /* static */ const alpha_half_preview: Static = STATIC("alpha_half_preview", false); + /* static */ const options_menu: Static = STATIC("options_menu", true); + ImGui.Checkbox("With HDR", (value = hdr.value) => hdr.value = value); ImGui.SameLine(); ShowHelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets."); + ImGui.Checkbox("With Alpha Preview", (value = alpha_preview.value) => alpha_preview.value = value); + ImGui.Checkbox("With Half Alpha Preview", (value = alpha_half_preview.value) => alpha_half_preview.value = value); + ImGui.Checkbox("With Options Menu", (value = options_menu.value) => options_menu.value = value); ImGui.SameLine(); ShowHelpMarker("Right-click on the individual color widget to show options."); + const misc_flags: ImGuiColorEditFlags = (hdr.value ? ImGuiColorEditFlags.HDR : 0) | (alpha_half_preview.value ? ImGuiColorEditFlags.AlphaPreviewHalf : (alpha_preview.value ? ImGuiColorEditFlags.AlphaPreview : 0)) | (options_menu.value ? 0 : ImGuiColorEditFlags.NoOptions); + + ImGui.Text("Color widget:"); + ImGui.SameLine(); ShowHelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n"); + ImGui.ColorEdit3("MyColor##1", color.value, misc_flags); + + ImGui.Text("Color widget HSV with Alpha:"); + ImGui.ColorEdit4("MyColor##2", color.value, ImGuiColorEditFlags.HSV | misc_flags); + + ImGui.Text("Color widget with Float Display:"); + ImGui.ColorEdit4("MyColor##2f", color.value, ImGuiColorEditFlags.Float | misc_flags); + + ImGui.Text("Color button with Picker:"); + ImGui.SameLine(); ShowHelpMarker("With the ImGuiColorEditFlags.NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags.NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup."); + ImGui.ColorEdit4("MyColor##3", color.value, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoLabel | misc_flags); + + ImGui.Text("Color button with Custom Picker Popup:"); + + // Generate a dummy palette + /* static */ const saved_palette_inited: Static = STATIC("saved_palette_inited", false); + /* static */ const saved_palette: Static = STATIC("saved_palette", []); + if (!saved_palette_inited.value) + for (let n = 0; n < 32; n++) + { + saved_palette.value[n] = new ImVec4(); + // ImGui.ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z); + const r: ImScalar = [ 0.0 ]; + const g: ImScalar = [ 0.0 ]; + const b: ImScalar = [ 0.0 ]; + ImGui.ColorConvertHSVtoRGB(n / 32.0, 0.8, 0.8, r, g, b); + saved_palette.value[n].x = r[0]; + saved_palette.value[n].y = g[0]; + saved_palette.value[n].z = b[0]; + saved_palette.value[n].w = 1.0; // Alpha + } + saved_palette_inited.value = true; + + /* static */ const backup_color: Static = STATIC("backup_color", new ImVec4()); + let open_popup: boolean = ImGui.ColorButton("MyColor##3b", color.value, misc_flags); + ImGui.SameLine(); + open_popup = open_popup || ImGui.Button("Palette"); + if (open_popup) + { + ImGui.OpenPopup("mypicker"); + backup_color.value.Copy(color.value); + } + if (ImGui.BeginPopup("mypicker")) + { + // FIXME: Adding a drag and drop example here would be perfect! + ImGui.Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!"); + ImGui.Separator(); + ImGui.ColorPicker4("##picker", color.value, misc_flags | ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text("Current"); + ImGui.ColorButton("##current", color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40)); + ImGui.Text("Previous"); + if (ImGui.ColorButton("##previous", backup_color.value, ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.AlphaPreviewHalf, new ImVec2(60,40))) + color.value.Copy(backup_color.value); + ImGui.Separator(); + ImGui.Text("Palette"); + for (let n = 0; n < IM_ARRAYSIZE(saved_palette.value); n++) + { + ImGui.PushID(n); + if ((n % 8) !== 0) + ImGui.SameLine(0.0, ImGui.GetStyle().ItemSpacing.y); + if (ImGui.ColorButton("##palette", saved_palette.value[n], ImGuiColorEditFlags.NoAlpha | ImGuiColorEditFlags.NoPicker | ImGuiColorEditFlags.NoTooltip, new ImVec2(20,20))) + color.value.Copy(new ImVec4(saved_palette.value[n].x, saved_palette.value[n].y, saved_palette.value[n].z, color.value.w)); // Preserve alpha! + + if (ImGui.BeginDragDropTarget()) + { + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3); + // if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) + // memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4); + ImGui.EndDragDropTarget(); + } + + ImGui.PopID(); + } + ImGui.EndGroup(); + ImGui.EndPopup(); + } + + ImGui.Text("Color button only:"); + ImGui.ColorButton("MyColor##3c", color.value, misc_flags, new ImVec2(80,80)); + + ImGui.Text("Color picker:"); + /* static */ const alpha: Static = STATIC("alpha", true); + /* static */ const alpha_bar: Static = STATIC("alpha_bar", true); + /* static */ const side_preview: Static = STATIC("side_preview", true); + /* static */ const ref_color: Static = STATIC("ref_color", false); + /* static */ const ref_color_v: Static = STATIC("ref_color_v", new ImVec4(1.0,0.0,1.0,0.5)); + /* static */ const inputs_mode: Static = STATIC("inputs_mode", 2); + /* static */ const picker_mode: Static = STATIC("picker_mode", 0); + ImGui.Checkbox("With Alpha", (value = alpha.value) => alpha.value = value); + ImGui.Checkbox("With Alpha Bar", (value = alpha_bar.value) => alpha_bar.value = value); + ImGui.Checkbox("With Side Preview", (value = side_preview.value) => side_preview.value = value); + if (side_preview) + { + ImGui.SameLine(); + ImGui.Checkbox("With Ref Color", (value = ref_color.value) => ref_color.value = value); + if (ref_color.value) + { + ImGui.SameLine(); + ImGui.ColorEdit4("##RefColor", ref_color_v.value, ImGuiColorEditFlags.NoInputs | misc_flags); + } + } + ImGui.Combo("Inputs Mode", (value = inputs_mode.value) => inputs_mode.value = value, "All Inputs\0No Inputs\0RGB Input\0HSV Input\0HEX Input\0"); + ImGui.Combo("Picker Mode", (value = picker_mode.value) => picker_mode.value = value, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0"); + ImGui.SameLine(); ShowHelpMarker("User can right-click the picker to change mode."); + let flags: ImGuiColorEditFlags = misc_flags; + if (!alpha.value) flags |= ImGuiColorEditFlags.NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4() + if (alpha_bar.value) flags |= ImGuiColorEditFlags.AlphaBar; + if (!side_preview.value) flags |= ImGuiColorEditFlags.NoSidePreview; + if (picker_mode.value === 1) flags |= ImGuiColorEditFlags.PickerHueBar; + if (picker_mode.value === 2) flags |= ImGuiColorEditFlags.PickerHueWheel; + if (inputs_mode.value === 1) flags |= ImGuiColorEditFlags.NoInputs; + if (inputs_mode.value === 2) flags |= ImGuiColorEditFlags.RGB; + if (inputs_mode.value === 3) flags |= ImGuiColorEditFlags.HSV; + if (inputs_mode.value === 4) flags |= ImGuiColorEditFlags.HEX; + ImGui.ColorPicker4("MyColor##4", color.value, flags, ref_color.value ? ref_color_v.value : null); + + ImGui.Text("Programmatically set defaults/options:"); + ImGui.SameLine(); ShowHelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible."); + if (ImGui.Button("Uint8 + HSV")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Uint8 | ImGuiColorEditFlags.HSV); + ImGui.SameLine(); + if (ImGui.Button("Float + HDR")) + ImGui.SetColorEditOptions(ImGuiColorEditFlags.Float | ImGuiColorEditFlags.RGB); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Range Widgets")) + { + /* static */ const begin: Static = STATIC("begin", 10), end: Static = STATIC("end", 90); + /* static */ const begin_i: Static = STATIC("begin_i", 100), end_i: Static = STATIC("end_i", 1000); + ImGui.DragFloatRange2("range", (value = begin.value) => begin.value = value, (value = end.value) => end.value = value, 0.25, 0.0, 100.0, "Min: %.1f %%", "Max: %.1f %%"); + ImGui.DragIntRange2("range int (no bounds)", (value = begin_i.value) => begin_i.value = value, (value = end_i.value) => end_i.value = value, 5, 0, 0, "Min: %.0f units", "Max: %.0f units"); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Multi-component Widgets")) + { + /* static */ const vec4f: Static> = STATIC>("vec4f", [ 0.10, 0.20, 0.30, 0.44 ]); + /* static */ const vec4i: Static> = STATIC>("vec4i", [ 1, 5, 100, 255 ]); + + ImGui.InputFloat2("input float2", vec4f.value); + ImGui.DragFloat2("drag float2", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat2("slider float2", vec4f.value, 0.0, 1.0); + ImGui.DragInt2("drag int2", vec4i.value, 1, 0, 255); + ImGui.InputInt2("input int2", vec4i.value); + ImGui.SliderInt2("slider int2", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat3("input float3", vec4f.value); + ImGui.DragFloat3("drag float3", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat3("slider float3", vec4f.value, 0.0, 1.0); + ImGui.DragInt3("drag int3", vec4i.value, 1, 0, 255); + ImGui.InputInt3("input int3", vec4i.value); + ImGui.SliderInt3("slider int3", vec4i.value, 0, 255); + ImGui.Spacing(); + + ImGui.InputFloat4("input float4", vec4f.value); + ImGui.DragFloat4("drag float4", vec4f.value, 0.01, 0.0, 1.0); + ImGui.SliderFloat4("slider float4", vec4f.value, 0.0, 1.0); + ImGui.InputInt4("input int4", vec4i.value); + ImGui.DragInt4("drag int4", vec4i.value, 1, 0, 255); + ImGui.SliderInt4("slider int4", vec4i.value, 0, 255); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Vertical Sliders")) + { + const spacing: number = 4; + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(spacing, spacing)); + + /* static */ const int_value: Static = STATIC("int_value", 0); + ImGui.VSliderInt("##int", new ImVec2(18,160), (value = int_value.value) => int_value.value = value, 0, 5); + ImGui.SameLine(); + + /* static */ const values: Static = STATIC("values#1072", [ 0.0, 0.60, 0.35, 0.9, 0.70, 0.20, 0.0 ]); + ImGui.PushID("set1"); + for (let i = 0; i < 7; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleColor(ImGuiCol.FrameBg, ImColor.HSV(i/7.0, 0.5, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgHovered, ImColor.HSV(i/7.0, 0.6, 0.5)); + ImGui.PushStyleColor(ImGuiCol.FrameBgActive, ImColor.HSV(i/7.0, 0.7, 0.5)); + ImGui.PushStyleColor(ImGuiCol.SliderGrab, ImColor.HSV(i/7.0, 0.9, 0.9)); + ImGui.VSliderFloat("##v", new ImVec2(18,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values.value[i].toFixed(3)}`); + ImGui.PopStyleColor(4); + ImGui.PopID(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set2"); + /* static */ const values2: Static = STATIC("values2", [ 0.20, 0.80, 0.40, 0.25 ]); + const rows: number = 3; + const small_slider_size: Readonly = new ImVec2(18, (160.0-(rows-1)*spacing)/rows); + for (let nx = 0; nx < 4; nx++) + { + if (nx > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + for (let ny = 0; ny < rows; ny++) + { + ImGui.PushID(nx*rows+ny); + ImGui.VSliderFloat("##v", small_slider_size, (value = values2.value[nx]) => values2.value[nx] = value, 0.0, 1.0, ""); + if (ImGui.IsItemActive() || ImGui.IsItemHovered()) + ImGui.SetTooltip(`${values2.value[nx].toFixed(3)}`); + ImGui.PopID(); + } + ImGui.EndGroup(); + } + ImGui.PopID(); + + ImGui.SameLine(); + ImGui.PushID("set3"); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.PushStyleVar(ImGuiStyleVar.GrabMinSize, 40); + ImGui.VSliderFloat("##v", new ImVec2(40,160), (value = values.value[i]) => values.value[i] = value, 0.0, 1.0, "%.2f\nsec"); + ImGui.PopStyleVar(); + ImGui.PopID(); + } + ImGui.PopID(); + ImGui.PopStyleVar(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Layout")) + { + if (ImGui.TreeNode("Child regions")) + { + /* static */ const disable_mouse_wheel: Static = STATIC("disable_mouse_wheel", false); + ImGui.Checkbox("Disable Mouse Wheel", (value = disable_mouse_wheel.value) => disable_mouse_wheel.value = value); + + ImGui.Text("Without border"); + /* static */ const line: Static = STATIC("line", 50); + let goto_line: boolean = ImGui.Button("Goto"); + ImGui.SameLine(); + ImGui.PushItemWidth(100); + goto_line = ImGui.InputInt("##Line", (value = line.value) => line.value = value, 0, 0, ImGuiInputTextFlags.EnterReturnsTrue) || goto_line; + ImGui.PopItemWidth(); + + ImGui.BeginChild("Sub1", new ImVec2(ImGui.GetWindowContentRegionWidth() * 0.5,300), false, ImGuiWindowFlags.HorizontalScrollbar | (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + for (let i = 0; i < 100; i++) + { + ImGui.Text(`${("0000" + i.toString()).substr(-4)}: scrollable region`); + if (goto_line && line.value === i) + ImGui.SetScrollHere(); + } + if (goto_line && line.value >= 100) + ImGui.SetScrollHere(); + ImGui.EndChild(); + + ImGui.SameLine(); + + ImGui.PushStyleVar(ImGuiStyleVar.ChildRounding, 5.0); + ImGui.BeginChild("Sub2", new ImVec2(0,300), true, (disable_mouse_wheel.value ? ImGuiWindowFlags.NoScrollWithMouse : 0)); + ImGui.Text("With border"); + ImGui.Columns(2); + for (let i = 0; i < 100; i++) + { + if (i === 50) + ImGui.NextColumn(); + const buf: string = `${("00000000" + (i*5731).toString(16)).substr(-8)}`; + ImGui.Button(buf, new ImVec2(-1.0, 0.0)); + } + ImGui.EndChild(); + ImGui.PopStyleVar(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Widgets Width")) + { + /* static */ const f: Static = STATIC("f#1181", 0.0); + ImGui.Text("PushItemWidth(100)"); + ImGui.SameLine(); ShowHelpMarker("Fixed width."); + ImGui.PushItemWidth(100); + ImGui.DragFloat("float##1", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetWindowWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of window width."); + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.5); + ImGui.DragFloat("float##2", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(GetContentRegionAvailWidth() * 0.5)"); + ImGui.SameLine(); ShowHelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)"); + ImGui.PushItemWidth(ImGui.GetContentRegionAvailWidth() * 0.5); + ImGui.DragFloat("float##3", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-100)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge minus 100"); + ImGui.PushItemWidth(-100); + ImGui.DragFloat("float##4", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.Text("PushItemWidth(-1)"); + ImGui.SameLine(); ShowHelpMarker("Align to right edge"); + ImGui.PushItemWidth(-1); + ImGui.DragFloat("float##5", (value = f.value) => f.value = value); + ImGui.PopItemWidth(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Basic Horizontal Layout")) + { + ImGui.TextWrapped("(Use ImGui.SameLine() to keep adding items to the right of the preceding item)"); + + // Text + ImGui.Text("Two items: Hello"); ImGui.SameLine(); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Adjust spacing + ImGui.Text("More spacing: Hello"); ImGui.SameLine(0, 20); + ImGui.TextColored(new ImVec4(1,1,0,1), "Sailor"); + + // Button + ImGui.AlignTextToFramePadding(); + ImGui.Text("Normal buttons"); ImGui.SameLine(); + ImGui.Button("Banana"); ImGui.SameLine(); + ImGui.Button("Apple"); ImGui.SameLine(); + ImGui.Button("Corniflower"); + + // Button + ImGui.Text("Small buttons"); ImGui.SameLine(); + ImGui.SmallButton("Like this one"); ImGui.SameLine(); + ImGui.Text("can fit within a text block."); + + // Aligned to arbitrary position. Easy/cheap column. + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.Text("x=150"); + ImGui.SameLine(300); ImGui.Text("x=300"); + ImGui.Text("Aligned"); + ImGui.SameLine(150); ImGui.SmallButton("x=150"); + ImGui.SameLine(300); ImGui.SmallButton("x=300"); + + // Checkbox + /* static */ const c1: Static=STATIC("c1", false),c2: Static=STATIC("c2", false),c3: Static=STATIC("c3", false),c4: Static=STATIC("c4", false); + ImGui.Checkbox("My", (value = c1.value) => c1.value = value); ImGui.SameLine(); + ImGui.Checkbox("Tailor", (value = c2.value) => c2.value = value); ImGui.SameLine(); + ImGui.Checkbox("Is", (value = c3.value) => c3.value = value); ImGui.SameLine(); + ImGui.Checkbox("Rich", (value = c4.value) => c4.value = value); + + // Various + /* static */ const f0: Static=STATIC("f0#1255", 1.0), f1: Static=STATIC("f1#1255", 2.0), f2: Static=STATIC("f2", 3.0); + ImGui.PushItemWidth(80); + const items: string[] = [ "AAAA", "BBBB", "CCCC", "DDDD" ]; + /* static */ const item: Static = STATIC("item#1258", -1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, items, IM_ARRAYSIZE(items)); ImGui.SameLine(); + ImGui.SliderFloat("X", (value = f0.value) => f0.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Y", (value = f1.value) => f1.value = value, 0.0,5.0); ImGui.SameLine(); + ImGui.SliderFloat("Z", (value = f2.value) => f2.value = value, 0.0,5.0); + ImGui.PopItemWidth(); + + ImGui.PushItemWidth(80); + ImGui.Text("Lists:"); + /* static */ const selection: Static = STATIC("selection", [ 0, 1, 2, 3 ]); + for (let i = 0; i < 4; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.PushID(i); + ImGui.ListBox("", (value = selection.value[i]) => selection.value[i] = value, items, IM_ARRAYSIZE(items)); + ImGui.PopID(); + if (ImGui.IsItemHovered()) ImGui.SetTooltip(`ListBox ${i} hovered`); + } + ImGui.PopItemWidth(); + + // Dummy + const sz: Readonly = new ImVec2(30,30); + ImGui.Button("A", sz); ImGui.SameLine(); + ImGui.Dummy(sz); ImGui.SameLine(); + ImGui.Button("B", sz); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Groups")) + { + ImGui.TextWrapped("(Using ImGui.BeginGroup()/EndGroup() to layout items. BeginGroup() basically locks the horizontal position. EndGroup() bundles the whole group so that you can use functions such as IsItemHovered() on it.)"); + ImGui.BeginGroup(); + { + ImGui.BeginGroup(); + ImGui.Button("AAA"); + ImGui.SameLine(); + ImGui.Button("BBB"); + ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Button("CCC"); + ImGui.Button("DDD"); + ImGui.EndGroup(); + ImGui.SameLine(); + ImGui.Button("EEE"); + ImGui.EndGroup(); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("First group hovered"); + } + // Capture the group size and create widgets using the same size + const size: ImVec2 = ImGui.GetItemRectSize(); + const values: number[/*5*/] = [ 0.5, 0.20, 0.80, 0.60, 0.25 ]; + ImGui.PlotHistogram_Array("##values", values, IM_ARRAYSIZE(values), 0, null, 0.0, 1.0, size); + + ImGui.Button("ACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.SameLine(); + ImGui.Button("REACTION", new ImVec2((size.x - ImGui.GetStyle().ItemSpacing.x)*0.5,size.y)); + ImGui.EndGroup(); + ImGui.SameLine(); + + ImGui.Button("LEVERAGE\nBUZZWORD", size); + ImGui.SameLine(); + + ImGui.ListBoxHeader("List", size); + ImGui.Selectable("Selected", true); + ImGui.Selectable("Not Selected", false); + ImGui.ListBoxFooter(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Text Baseline Alignment")) + { + ImGui.TextWrapped("(This is testing the vertical alignment that occurs on text to keep it at the same baseline as widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets)"); + + ImGui.Text("One\nTwo\nThree"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("One\nTwo\nThree"); + + ImGui.Button("HOP##1"); ImGui.SameLine(); + ImGui.Text("Banana"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("HOP##2"); ImGui.SameLine(); + ImGui.Text("Hello\nWorld"); ImGui.SameLine(); + ImGui.Text("Banana"); + + ImGui.Button("TEST##1"); ImGui.SameLine(); + ImGui.Text("TEST"); ImGui.SameLine(); + ImGui.SmallButton("TEST##2"); + + ImGui.AlignTextToFramePadding(); // If your line starts with text, call this to align it to upcoming widgets. + ImGui.Text("Text aligned to Widget"); ImGui.SameLine(); + ImGui.Button("Widget##1"); ImGui.SameLine(); + ImGui.Text("Widget"); ImGui.SameLine(); + ImGui.SmallButton("Widget##2"); ImGui.SameLine(); + ImGui.Button("Widget##3"); + + // Tree + const spacing: number = ImGui.GetStyle().ItemInnerSpacing.x; + ImGui.Button("Button##1"); + ImGui.SameLine(0.0, spacing); + if (ImGui.TreeNode("Node##1")) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + ImGui.AlignTextToFramePadding(); // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit). + const node_open: boolean = ImGui.TreeNode("Node##2"); // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content. + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##2"); + if (node_open) { for (let i = 0; i < 6; i++) ImGui.BulletText(`Item ${i}..`); ImGui.TreePop(); } // Dummy tree data + + // Bullet + ImGui.Button("Button##3"); + ImGui.SameLine(0.0, spacing); + ImGui.BulletText("Bullet text"); + + ImGui.AlignTextToFramePadding(); + ImGui.BulletText("Node"); + ImGui.SameLine(0.0, spacing); ImGui.Button("Button##4"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Scrolling")) + { + ImGui.TextWrapped("(Use SetScrollHere() or SetScrollFromPosY() to scroll to a given position.)"); + /* static */ const track: Static = STATIC("track", true); + /* static */ const track_line: Static = STATIC("track_line", 50), scroll_to_px: Static = STATIC("scroll_to_px", 200); + ImGui.Checkbox("Track", (value = track.value) => track.value = value); + ImGui.PushItemWidth(100); + ImGui.SameLine(130); track.value = ImGui.DragInt("##line", (value = track_line.value) => track_line.value = value, 0.25, 0, 99, "Line = %.0f") || track.value; + let scroll_to: boolean = ImGui.Button("Scroll To Pos"); + ImGui.SameLine(130); scroll_to = ImGui.DragInt("##pos_y", (value = scroll_to_px.value) => scroll_to_px.value = value, 1.00, 0, 9999, "Y = %.0f px") || scroll_to; + ImGui.PopItemWidth(); + if (scroll_to) track.value = false; + + for (let i = 0; i < 5; i++) + { + if (i > 0) ImGui.SameLine(); + ImGui.BeginGroup(); + ImGui.Text(i === 0 ? "Top" : i === 1 ? "25%" : i === 2 ? "Center" : i === 3 ? "75%" : "Bottom"); + ImGui.BeginChild(ImGui.GetID(i), new ImVec2(ImGui.GetWindowWidth() * 0.17, 200.0), true); + if (scroll_to) + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + scroll_to_px.value, i * 0.25); + for (let line = 0; line < 100; line++) + { + if (track.value && line === track_line.value) + { + ImGui.TextColored(new ImColor(255,255,0), `Line ${line}`); + ImGui.SetScrollHere(i * 0.25); // 0.0:top, 0.5f:center, 1.0f:bottom + } + else + { + ImGui.Text(`Line ${line}`); + } + } + const scroll_y: number = ImGui.GetScrollY(), scroll_max_y: number = ImGui.GetScrollMaxY(); + ImGui.EndChild(); + ImGui.Text(`${scroll_y.toFixed(0)}/${scroll_max_y.toFixed(0)}`); + ImGui.EndGroup(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.Bullet(); ImGui.TextWrapped("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags.HorizontalScrollbar flag."); + ImGui.Bullet(); ImGui.TextWrapped("You may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin()."); + /* static */ const lines: Static = STATIC("lines#1432", 7); + ImGui.SliderInt("Lines", (value = lines.value) => lines.value = value, 1, 15); + ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 3.0); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2.0, 1.0)); + ImGui.BeginChild("scrolling", new ImVec2(0, ImGui.GetFrameHeightWithSpacing()*7 + 30), true, ImGuiWindowFlags.HorizontalScrollbar); + for (let line = 0; line < lines.value; line++) + { + // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off + // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API) + const num_buttons: number = 10 + ((line & 1) ? line * 9 : line * 3); + for (let n = 0; n < num_buttons; n++) + { + if (n > 0) ImGui.SameLine(); + ImGui.PushID(n + line * 1000); + const num_buf: string = n.toFixed(0); + const label: string = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; + const hue: number = n*0.05; + ImGui.PushStyleColor(ImGuiCol.Button, ImColor.HSV(hue, 0.6, 0.6)); + ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ImColor.HSV(hue, 0.7, 0.7)); + ImGui.PushStyleColor(ImGuiCol.ButtonActive, ImColor.HSV(hue, 0.8, 0.8)); + ImGui.Button(label, new ImVec2(40.0 + Math.sin(line + n) * 20.0, 0.0)); + ImGui.PopStyleColor(3); + ImGui.PopID(); + } + } + const scroll_x: number = ImGui.GetScrollX(), scroll_max_x: number = ImGui.GetScrollMaxX(); + ImGui.EndChild(); + ImGui.PopStyleVar(2); + let scroll_x_delta: number = 0.0; + ImGui.SmallButton("<<"); if (ImGui.IsItemActive()) scroll_x_delta = -ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text("Scroll from code"); ImGui.SameLine(); + ImGui.SmallButton(">>"); if (ImGui.IsItemActive()) scroll_x_delta = +ImGui.GetIO().DeltaTime * 1000.0; ImGui.SameLine(); + ImGui.Text(`${scroll_x.toFixed(0)}/${scroll_max_x.toFixed(0)}`); + if (scroll_x_delta !== 0.0) + { + ImGui.BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window) + ImGui.SetScrollX(ImGui.GetScrollX() + scroll_x_delta); + ImGui.End(); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Clipping")) + { + /* static */ const size: Static = STATIC("size", new ImVec2(100, 100)), offset: Static = STATIC("offset", new ImVec2(50, 20)); + ImGui.TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost."); + ImGui.DragFloat2("size", size.value, 0.5, 0.0, 200.0, "%.0f"); + ImGui.TextWrapped("(Click and drag)"); + const pos: Readonly = ImGui.GetCursorScreenPos(); + const clip_rect: Readonly = new ImVec4(pos.x, pos.y, pos.x+size.value.x, pos.y+size.value.y); + ImGui.InvisibleButton("##dummy", size.value); + if (ImGui.IsItemActive() && ImGui.IsMouseDragging()) { offset.value.x += ImGui.GetIO().MouseDelta.x; offset.value.y += ImGui.GetIO().MouseDelta.y; } + ImGui.GetWindowDrawList().AddRectFilled(pos, new ImVec2(pos.x+size.value.x,pos.y+size.value.y), IM_COL32(90,90,120,255)); + ImGui.GetWindowDrawList().AddText_Font(ImGui.GetFont(), ImGui.GetFontSize()*2.0, new ImVec2(pos.x+offset.value.x,pos.y+offset.value.y), IM_COL32(255,255,255,255), "Line 1 hello\nLine 2 clip me!", null, 0.0, clip_rect); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Popups & Modal windows")) + { + if (ImGui.TreeNode("Popups")) + { + ImGui.TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it."); + + /* static */ const selected_fish: Static = STATIC("selected_fish", -1); + const names: string[] = [ "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" ]; + /* static */ const toggles: Static = STATIC("toggles", [ true, false, false, false, false ]); + + // Simple selection popup + // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label) + if (ImGui.Button("Select..")) + ImGui.OpenPopup("select"); + ImGui.SameLine(); + ImGui.TextUnformatted(selected_fish.value === -1 ? "" : names[selected_fish.value]); + if (ImGui.BeginPopup("select")) + { + ImGui.Text("Aquarium"); + ImGui.Separator(); + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + if (ImGui.Selectable(names[i])) + selected_fish.value = i; + ImGui.EndPopup(); + } + + // Showing a menu with toggles + if (ImGui.Button("Toggle..")) + ImGui.OpenPopup("toggle"); + if (ImGui.BeginPopup("toggle")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + + ImGui.Separator(); + ImGui.Text("Tooltip here"); + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I am a tooltip over a popup"); + + if (ImGui.Button("Stacked Popup")) + ImGui.OpenPopup("another popup"); + if (ImGui.BeginPopup("another popup")) + { + for (let i = 0; i < IM_ARRAYSIZE(names); i++) + { + ImGui.MenuItem(names[i], "", (value = toggles.value[i]) => toggles.value[i] = value); + } + if (ImGui.BeginMenu("Sub-menu")) + { + ImGui.MenuItem("Click me"); + ImGui.EndMenu(); + } + ImGui.EndPopup(); + } + ImGui.EndPopup(); + } + + if (ImGui.Button("Popup Menu..")) + ImGui.OpenPopup("FilePopup"); + if (ImGui.BeginPopup("FilePopup")) + { + ShowExampleMenuFile(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Context menus")) + { + // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing: + // if (IsItemHovered() && IsMouseClicked(0)) + // OpenPopup(id); + // return BeginPopup(id); + // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation. + /* static */ const value: Static = STATIC("value", 0.5); + ImGui.Text(`Value = ${value.value.toFixed(3)} (<-- right-click here)`); + if (ImGui.BeginPopupContextItem("item context menu")) + { + if (ImGui.Selectable("Set to zero")) value.value = 0.0; + if (ImGui.Selectable("Set to PI")) value.value = 3.1415; + ImGui.PushItemWidth(-1); + ImGui.DragFloat("##Value", (_value = value.value) => value.value = _value, 0.1, 0.0, 0.0); + ImGui.PopItemWidth(); + ImGui.EndPopup(); + } + + /* static */ const name: Static = STATIC("name", new ImStringBuffer(32, "Label1")); + const buf: string = `Button: ${name}###Button`; // ### operator override ID ignoring the preceding label + ImGui.Button(buf); + if (ImGui.BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). + { + ImGui.Text("Edit name:"); + ImGui.InputText("##edit", name.value, IM_ARRAYSIZE(name.value)); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + ImGui.SameLine(); ImGui.Text("(<-- right-click here)"); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Modals")) + { + ImGui.TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window."); + + if (ImGui.Button("Delete..")) + ImGui.OpenPopup("Delete?"); + if (ImGui.BeginPopupModal("Delete?", null, ImGuiWindowFlags.AlwaysAutoResize)) + { + ImGui.Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n"); + ImGui.Separator(); + + ///* static */ const dummy_i: number = 0; + //ImGui.Combo("Combo", &dummy_i, "Delete\0Delete harder\0"); + + /* static */ const dont_ask_me_next_time: Static = STATIC("dont_ask_me_next_time", false); + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + ImGui.Checkbox("Don't ask me next time", (value = dont_ask_me_next_time.value) => dont_ask_me_next_time.value = value); + ImGui.PopStyleVar(); + + if (ImGui.Button("OK", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.SameLine(); + if (ImGui.Button("Cancel", new ImVec2(120,0))) { ImGui.CloseCurrentPopup(); } + ImGui.EndPopup(); + } + + if (ImGui.Button("Stacked modals..")) + ImGui.OpenPopup("Stacked 1"); + if (ImGui.BeginPopupModal("Stacked 1")) + { + ImGui.Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol.ModalWindowDarkening] for darkening."); + /* static */ const item: Static = STATIC("item#1636", 1); + ImGui.Combo("Combo", (value = item.value) => item.value = value, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); + /* static */ const color: Static> = STATIC>("color#2", [ 0.4,0.7,0.0,0.5 ]); + ImGui.ColorEdit4("color", color.value); // This is to test behavior of stacked regular popups over a modal + + if (ImGui.Button("Add another modal..")) + ImGui.OpenPopup("Stacked 2"); + if (ImGui.BeginPopupModal("Stacked 2")) + { + ImGui.Text("Hello from Stacked The Second"); + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + if (ImGui.Button("Close")) + ImGui.CloseCurrentPopup(); + ImGui.EndPopup(); + } + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Menus inside a regular window")) + { + ImGui.TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!"); + ImGui.Separator(); + // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above. + // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here + // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus. + ImGui.PushID("foo"); + ImGui.MenuItem("Menu item", "CTRL+M"); + if (ImGui.BeginMenu("Menu inside a regular window")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.PopID(); + ImGui.Separator(); + ImGui.TreePop(); + } + } + + if (ImGui.CollapsingHeader("Columns")) + { + ImGui.PushID("Columns"); + + // Basic columns + if (ImGui.TreeNode("Basic")) + { + ImGui.Text("Without border:"); + ImGui.Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui.Separator(); + for (let n = 0; n < 14; n++) + { + const label: string = `Item ${n}`; + if (ImGui.Selectable(label)) {} + if (ImGui.Button(label, new ImVec2(-1,0))) {} + ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + + ImGui.Text("With border:"); + ImGui.Columns(4, "mycolumns"); // 4-ways, with border + ImGui.Separator(); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Text("Hovered"); ImGui.NextColumn(); + ImGui.Separator(); + const names: string[/*3*/] = [ "One", "Two", "Three" ]; + const paths: string[/*3*/] = [ "/path/one", "/path/two", "/path/three" ]; + /* static */ const selected: Static = STATIC("selected#1709", -1); + for (let i = 0; i < 3; i++) + { + const label: string = ("0000" + i.toString()).substr(-4); + if (ImGui.Selectable(label, selected.value === i, ImGuiSelectableFlags.SpanAllColumns)) + selected.value = i; + const hovered: boolean = ImGui.IsItemHovered(); + ImGui.NextColumn(); + ImGui.Text(names[i]); ImGui.NextColumn(); + ImGui.Text(paths[i]); ImGui.NextColumn(); + ImGui.Text(`${hovered}`); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Create multiple items in a same cell before switching to next column + if (ImGui.TreeNode("Mixed items")) + { + ImGui.Columns(3, "mixed"); + ImGui.Separator(); + + ImGui.Text("Hello"); + ImGui.Button("Banana"); + ImGui.NextColumn(); + + ImGui.Text("ImGui"); + ImGui.Button("Apple"); + /* static */ const foo: Static = STATIC("foo", 1.0); + ImGui.InputFloat("red", (value = foo.value) => foo.value = value, 0.05, 0, 3); + ImGui.Text("An extra line here."); + ImGui.NextColumn(); + + ImGui.Text("Sailor"); + ImGui.Button("Corniflower"); + /* static */ const bar: Static = STATIC("bar", 1.0); + ImGui.InputFloat("blue", (value = bar.value) => bar.value = value, 0.05, 0, 3); + ImGui.NextColumn(); + + if (ImGui.CollapsingHeader("Category A")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category B")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + if (ImGui.CollapsingHeader("Category C")) { ImGui.Text("Blah blah blah"); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + // Word wrapping + if (ImGui.TreeNode("Word-wrapping")) + { + ImGui.Columns(2, "word-wrapping"); + ImGui.Separator(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Left"); + ImGui.NextColumn(); + ImGui.TextWrapped("The quick brown fox jumps over the lazy dog."); + ImGui.TextWrapped("Hello Right"); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Borders")) + { + // NB: Future columns API should allow automatic horizontal borders. + /* static */ const h_borders: Static = STATIC("h_borders", true); + /* static */ const v_borders: Static = STATIC("v_borders", true); + ImGui.Checkbox("horizontal", (value = h_borders.value) => h_borders.value = value); + ImGui.SameLine(); + ImGui.Checkbox("vertical", (value = v_borders.value) => v_borders.value = value); + ImGui.Columns(4, null, v_borders.value); + for (let i = 0; i < 4*3; i++) + { + if (h_borders.value && ImGui.GetColumnIndex() === 0) + ImGui.Separator(); + // ImGui.Text("%c%c%c", 'a'+i, 'a'+i, 'a'+i); + const c: string = String.fromCharCode("a".charCodeAt(0) + i); + ImGui.Text(`${c}${c}${c}`); + ImGui.Text(`Width ${ImGui.GetColumnWidth().toFixed(2)}\nOffset ${ImGui.GetColumnOffset().toFixed(2)}`); + ImGui.NextColumn(); + } + ImGui.Columns(1); + if (h_borders.value) + ImGui.Separator(); + ImGui.TreePop(); + } + + // Scrolling columns + /* + if (ImGui.TreeNode("Vertical Scrolling")) + { + ImGui.BeginChild("##header", ImVec2(0, ImGui.GetTextLineHeightWithSpacing()+ImGui.GetStyle().ItemSpacing.y)); + ImGui.Columns(3); + ImGui.Text("ID"); ImGui.NextColumn(); + ImGui.Text("Name"); ImGui.NextColumn(); + ImGui.Text("Path"); ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.EndChild(); + ImGui.BeginChild("##scrollingregion", ImVec2(0, 60)); + ImGui.Columns(3); + for (let i = 0; i < 10; i++) + { + ImGui.Text("%04d", i); ImGui.NextColumn(); + ImGui.Text("Foobar"); ImGui.NextColumn(); + ImGui.Text("/path/foobar/%04d/", i); ImGui.NextColumn(); + } + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + */ + + if (ImGui.TreeNode("Horizontal Scrolling")) + { + ImGui.SetNextWindowContentSize(new ImVec2(1500.0, 0.0)); + ImGui.BeginChild("##ScrollingRegion", new ImVec2(0, ImGui.GetFontSize() * 20), false, ImGuiWindowFlags.HorizontalScrollbar); + ImGui.Columns(10); + const ITEMS_COUNT: number = 2000; + const clipper: ImGuiListClipper = new ImGuiListClipper(ITEMS_COUNT); // Also demonstrate using the clipper for large list + while (clipper.Step()) + { + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + for (let j = 0; j < 10; j++) + { + ImGui.Text(`Line ${i} Column ${j}...`); + ImGui.NextColumn(); + } + } + // clipper.delete(); // NOTE: native emscripten class + ImGui.Columns(1); + ImGui.EndChild(); + ImGui.TreePop(); + } + + const node_open: boolean = ImGui.TreeNode("Tree within single cell"); + ImGui.SameLine(); ShowHelpMarker("NB: Tree node must be poped before ending the cell. There's no storage of state per-cell."); + if (node_open) + { + ImGui.Columns(2, "tree items"); + ImGui.Separator(); + if (ImGui.TreeNode("Hello")) { ImGui.BulletText("Sailor"); ImGui.TreePop(); } ImGui.NextColumn(); + if (ImGui.TreeNode("Bonjour")) { ImGui.BulletText("Marin"); ImGui.TreePop(); } ImGui.NextColumn(); + ImGui.Columns(1); + ImGui.Separator(); + ImGui.TreePop(); + } + ImGui.PopID(); + } + + if (ImGui.CollapsingHeader("Filtering")) + { + /* static */ const filter: Static = STATIC("filter#1864", new ImGuiTextFilter); + ImGui.Text("Filter usage:\n" + + " \"\" display all lines\n" + + " \"xxx\" display lines containing \"xxx\"\n" + + " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n" + + " \"-xxx\" hide lines containing \"xxx\""); + filter.value.Draw(); + const lines: string[] = [ "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" ]; + for (let i = 0; i < IM_ARRAYSIZE(lines); i++) + if (filter.value.PassFilter(lines[i])) + ImGui.BulletText(lines[i]); + } + + if (ImGui.CollapsingHeader("Inputs & Focus")) + { + const io: ImGuiIO = ImGui.GetIO(); + ImGui.Checkbox("io.MouseDrawCursor", (value = io.MouseDrawCursor) => io.MouseDrawCursor = value); + ImGui.SameLine(); ShowHelpMarker("Request ImGui to render a mouse cursor for you in software. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something)."); + + ImGui.Text(`WantCaptureMouse: ${io.WantCaptureMouse}`); + ImGui.Text(`WantCaptureKeyboard: ${io.WantCaptureKeyboard}`); + ImGui.Text(`WantTextInput: ${io.WantTextInput}`); + ImGui.Text(`WantMoveMouse: ${io.WantMoveMouse}`); + + if (ImGui.TreeNode("Keyboard & Mouse State")) + { + if (ImGui.IsMousePosValid()) + ImGui.Text(`Mouse pos: (${io.MousePos.x}, ${io.MousePos.x})`); + else + ImGui.Text("Mouse pos: "); + ImGui.Text("Mouse down:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`b${i} (${io.MouseDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Mouse clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse dbl-clicked:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseDoubleClicked(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text("Mouse released:"); for (let i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui.IsMouseReleased(i)) { ImGui.SameLine(); ImGui.Text(`b${i}`); } + ImGui.Text(`Mouse wheel: ${io.MouseWheel.toFixed(1)}`); + + ImGui.Text("Keys down:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0) { ImGui.SameLine(); ImGui.Text(`${i} (${io.KeysDownDuration[i].toFixed(2)} secs)`); } + ImGui.Text("Keys pressed:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyPressed(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text("Keys release:"); for (let i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui.IsKeyReleased(i)) { ImGui.SameLine(); ImGui.Text(i.toString()); } + ImGui.Text(`Keys mods: ${io.KeyCtrl ? "CTRL " : ""}${io.KeyShift ? "SHIFT " : ""}${io.KeyAlt ? "ALT " : ""}${io.KeySuper ? "SUPER " : ""}`); + + ImGui.Button("Hovering me sets the\nkeyboard capture flag"); + if (ImGui.IsItemHovered()) + ImGui.CaptureKeyboardFromApp(true); + ImGui.SameLine(); + ImGui.Button("Holding me clears the\nthe keyboard capture flag"); + if (ImGui.IsItemActive()) + ImGui.CaptureKeyboardFromApp(false); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Tabbing")) + { + ImGui.Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields."); + /* static */ const buf: Static = STATIC("buf1#1921", new ImStringBuffer(32, "dummy")); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.InputText("3", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.PushAllowKeyboardFocus(false); + ImGui.InputText("4 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + //ImGui.SameLine(); ShowHelperMarker("Use ImGui.PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets."); + ImGui.PopAllowKeyboardFocus(); + ImGui.InputText("5", buf.value, IM_ARRAYSIZE(buf.value)); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focus from code")) + { + const focus_1: boolean = ImGui.Button("Focus on 1"); ImGui.SameLine(); + const focus_2: boolean = ImGui.Button("Focus on 2"); ImGui.SameLine(); + const focus_3: boolean = ImGui.Button("Focus on 3"); + let has_focus: number = 0; + /* static */ const buf: Static = STATIC("buf2#1944", new ImStringBuffer(128, "click on a button to set focus")); + + if (focus_1) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("1", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 1; + + if (focus_2) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("2", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 2; + + ImGui.PushAllowKeyboardFocus(false); + if (focus_3) ImGui.SetKeyboardFocusHere(); + ImGui.InputText("3 (tab skip)", buf.value, IM_ARRAYSIZE(buf.value)); + if (ImGui.IsItemActive()) has_focus = 3; + ImGui.PopAllowKeyboardFocus(); + if (has_focus) + ImGui.Text(`Item with focus: ${has_focus}`); + else + ImGui.Text("Item with focus: "); + ImGui.TextWrapped("Cursor & selection are preserved when refocusing last used item in code."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Focused & Hovered Test")) + { + /* static */ const embed_all_inside_a_child_window: Static = STATIC("embed_all_inside_a_child_window", false); + ImGui.Checkbox("Embed everything inside a child window (for additional testing)", (value = embed_all_inside_a_child_window.value) => embed_all_inside_a_child_window.value = value); + if (embed_all_inside_a_child_window.value) + ImGui.BeginChild("embeddingchild", new ImVec2(0, ImGui.GetFontSize() * 25), true); + + // Testing IsWindowFocused() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowFocused() = ${ImGui.IsWindowFocused()}\n` + + `IsWindowFocused(_ChildWindows) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows)}\n` + + `IsWindowFocused(_ChildWindows|_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.ChildWindows | ImGuiFocusedFlags.RootWindow)}\n` + + `IsWindowFocused(_RootWindow) = ${ImGui.IsWindowFocused(ImGuiFocusedFlags.RootWindow)}\n`); + + // Testing IsWindowHovered() function with its various flags (note that the flags can be combined) + ImGui.BulletText( + `IsWindowHovered() = ${ImGui.IsWindowHovered()}\n` + + `IsWindowHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsWindowHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsWindowHovered(_ChildWindows) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows)}\n` + + `IsWindowHovered(_ChildWindows|_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.ChildWindows | ImGuiHoveredFlags.RootWindow)}\n` + + `IsWindowHovered(_RootWindow) = ${ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow)}\n"`); + + // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code) + ImGui.Button("ITEM"); + ImGui.BulletText( + `IsItemHovered() = ${ImGui.IsItemHovered()}\n` + + `IsItemHovered(_AllowWhenBlockedByPopup) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByPopup)}\n` + + `IsItemHovered(_AllowWhenBlockedByActiveItem) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)}\n` + + `IsItemHovered(_AllowWhenOverlapped) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenOverlapped)}\n` + + `IsItemhovered(_RectOnly) = ${ImGui.IsItemHovered(ImGuiHoveredFlags.RectOnly)}\n`); + + ImGui.BeginChild("child", new ImVec2(0,50), true); + ImGui.Text("This is another child window for testing IsWindowHovered() flags."); + ImGui.EndChild(); + + if (embed_all_inside_a_child_window.value) + ImGui.EndChild(); + + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Dragging")) + { + ImGui.TextWrapped("You can use ImGui.GetMouseDragDelta(0) to query for the dragged amount on any widget."); + for (let button = 0; button < 3; button++) + ImGui.Text(`IsMouseDragging(${button}):\n w/ default threshold: ${ImGui.IsMouseDragging(button)},\n w/ zero threshold: ${ImGui.IsMouseDragging(button, 0.0)}\n w/ large threshold: ${ImGui.IsMouseDragging(button, 20.0)}`); + ImGui.Button("Drag Me"); + if (ImGui.IsItemActive()) + { + // Draw a line between the button and the mouse cursor + const draw_list: ImGui.ImDrawList = ImGui.GetWindowDrawList(); + draw_list.PushClipRectFullScreen(); + draw_list.AddLine(ImGui.CalcItemRectClosestPoint(io.MousePos, true, -2.0), io.MousePos, ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[ImGuiCol.Button]), 4.0); + draw_list.PopClipRect(); + + // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold) + // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta() + const value_raw: Readonly = ImGui.GetMouseDragDelta(0, 0.0); + const value_with_lock_threshold: Readonly = ImGui.GetMouseDragDelta(0); + const mouse_delta: Readonly = io.MouseDelta; + ImGui.SameLine(); ImGui.Text(`Raw (${value_raw.x.toFixed(1)}, ${value_raw.y.toFixed(1)}), WithLockThresold (${value_with_lock_threshold.x.toFixed(1)}, ${value_with_lock_threshold.y.toFixed(1)}), MouseDelta (${mouse_delta.x.toFixed(1)}, ${mouse_delta.y.toFixed(1)})`); + } + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Mouse cursors")) + { + const mouse_cursors_names: string[] = [ "Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE" ]; + IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) === ImGuiMouseCursor.COUNT); + + ImGui.Text(`Current mouse cursor = ${ImGui.GetMouseCursor()}: ${mouse_cursors_names[ImGui.GetMouseCursor()]}`); + ImGui.Text("Hover to see mouse cursors:"); + ImGui.SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui.GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); + for (let i = 0; i < ImGuiMouseCursor.COUNT; i++) + { + const label: string = `Mouse cursor ${i}: ${mouse_cursors_names[i]}`; + ImGui.Bullet(); ImGui.Selectable(label, false); + if (ImGui.IsItemHovered()) + ImGui.SetMouseCursor(i); + } + ImGui.TreePop(); + } + } + + ImGui.End(); +} + +// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. +// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally. +export function ShowStyleSelector(label: string): boolean +{ + /* static */ const style_idx: Static = STATIC("style_idx", 0); + if (ImGui.Combo(label, (value = style_idx.value) => style_idx.value = value, "Classic\0Dark\0Light\0")) + { + switch (style_idx.value) + { + case 0: ImGui.StyleColorsClassic(); break; + case 1: ImGui.StyleColorsDark(); break; + case 2: ImGui.StyleColorsLight(); break; + } + return true; + } + return false; +} + +// Demo helper function to select among loaded fonts. +// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one. +export function ShowFontSelector(label: string): void +{ + const io: ImGuiIO = ImGui.GetIO(); + const font_current: ImFont = ImGui.GetFont(); + if (ImGui.BeginCombo(label, font_current.GetDebugName())) + { + ImGui.Selectable(font_current.GetDebugName()); // TODO + // for (let n = 0; n < io.Fonts->Fonts.Size; n++) + // if (ImGui.Selectable(io.Fonts->Fonts[n]->GetDebugName(), io.Fonts->Fonts[n] === font_current)) + // io.FontDefault = io.Fonts->Fonts[n]; + ImGui.EndCombo(); + } + ImGui.SameLine(); + ShowHelpMarker( + "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n" + + "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n" + + "- Read FAQ and documentation in extra_fonts/ for more details.\n" + + "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame()."); +} + +export function ShowStyleEditor(ref: ImGuiStyle | null = null): void +{ + // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference) + const style: ImGuiStyle = ImGui.GetStyle(); + /* static */ const ref_saved_style: Static = STATIC("ref_saved_style", new ImGuiStyle()); + + // Default to using internal storage as reference + /* static */ const init: Static = STATIC("init", true); + if (init.value && ref === null) + ref_saved_style.value.Copy(style); + init.value = false; + if (ref === null) + ref = ref_saved_style.value; + + ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.50); + + if (/*ImGui.*/ShowStyleSelector("Colors##Selector")) + ref_saved_style.value.Copy(style); + /*ImGui.*/ShowFontSelector("Fonts##Selector"); + + + // Simplified Settings + if (ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0f")) + style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding + { let window_border: boolean = (style.WindowBorderSize > 0.0); if (ImGui.Checkbox("WindowBorder", (value = window_border) => window_border = value)) style.WindowBorderSize = window_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let frame_border: boolean = (style.FrameBorderSize > 0.0); if (ImGui.Checkbox("FrameBorder", (value = frame_border) => frame_border = value)) style.FrameBorderSize = frame_border ? 1.0 : 0.0; } + ImGui.SameLine(); + { let popup_border: boolean = (style.PopupBorderSize > 0.0); if (ImGui.Checkbox("PopupBorder", (value = popup_border) => popup_border = value)) style.PopupBorderSize = popup_border ? 1.0 : 0.0; } + + // Save/Revert button + if (ImGui.Button("Save Ref")) + ref.Copy(ref_saved_style.value.Copy(style)); + ImGui.SameLine(); + if (ImGui.Button("Revert Ref")) + style.Copy(ref); + ImGui.SameLine(); + ShowHelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export Colors\" below to save them somewhere."); + + if (ImGui.TreeNode("Rendering")) + { + ImGui.Checkbox("Anti-aliased lines", (value = style.AntiAliasedLines) => style.AntiAliasedLines = value); ImGui.SameLine(); ShowHelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well."); + ImGui.Checkbox("Anti-aliased fill", (value = style.AntiAliasedFill) => style.AntiAliasedFill = value); + ImGui.PushItemWidth(100); + ImGui.DragFloat("Curve Tessellation Tolerance", (value = style.CurveTessellationTol) => style.CurveTessellationTol = value, 0.02, 0.10, Number.MAX_VALUE, null, 2.0); + if (style.CurveTessellationTol < 0.0) style.CurveTessellationTol = 0.10; + ImGui.DragFloat("Global Alpha", (value = style.Alpha) => style.Alpha = value, 0.005, 0.20, 1.0, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero. + ImGui.PopItemWidth(); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Settings")) + { + ImGui.SliderFloat2("WindowPadding", style.WindowPadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat("PopupRounding", (value = style.PopupRounding) => style.PopupRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat2("FramePadding", style.FramePadding, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemSpacing", style.ItemSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("ItemInnerSpacing", style.ItemInnerSpacing, 0.0, 20.0, "%.0"); + ImGui.SliderFloat2("TouchExtraPadding", style.TouchExtraPadding, 0.0, 10.0, "%.0"); + ImGui.SliderFloat("IndentSpacing", (value = style.IndentSpacing) => style.IndentSpacing = value, 0.0, 30.0, "%.0"); + ImGui.SliderFloat("ScrollbarSize", (value = style.ScrollbarSize) => style.ScrollbarSize = value, 1.0, 20.0, "%.0"); + ImGui.SliderFloat("GrabMinSize", (value = style.GrabMinSize) => style.GrabMinSize = value, 1.0, 20.0, "%.0"); + ImGui.Text("BorderSize"); + ImGui.SliderFloat("WindowBorderSize", (value = style.WindowBorderSize) => style.WindowBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("ChildBorderSize", (value = style.ChildBorderSize) => style.ChildBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("PopupBorderSize", (value = style.PopupBorderSize) => style.PopupBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.SliderFloat("FrameBorderSize", (value = style.FrameBorderSize) => style.FrameBorderSize = value, 0.0, 1.0, "%.0"); + ImGui.Text("Rounding"); + ImGui.SliderFloat("WindowRounding", (value = style.WindowRounding) => style.WindowRounding = value, 0.0, 14.0, "%.0"); + ImGui.SliderFloat("ChildRounding", (value = style.ChildRounding) => style.ChildRounding = value, 0.0, 16.0, "%.0"); + ImGui.SliderFloat("FrameRounding", (value = style.FrameRounding) => style.FrameRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("ScrollbarRounding", (value = style.ScrollbarRounding) => style.ScrollbarRounding = value, 0.0, 12.0, "%.0"); + ImGui.SliderFloat("GrabRounding", (value = style.GrabRounding) => style.GrabRounding = value, 0.0, 12.0, "%.0"); + ImGui.Text("Alignment"); + ImGui.SliderFloat2("WindowTitleAlign", style.WindowTitleAlign, 0.0, 1.0, "%.2f"); + ImGui.SliderFloat2("ButtonTextAlign", style.ButtonTextAlign, 0.0, 1.0, "%.2f"); ImGui.SameLine(); ShowHelpMarker("Alignment applies when a button is larger than its text content."); + ImGui.TreePop(); + } + + if (ImGui.TreeNode("Colors")) + { + /* static */ const output_dest: Static = STATIC("output_dest", 0); + /* static */ const output_only_modified: Static = STATIC("output_only_modified", true); + if (ImGui.Button("Export Unsaved")) + { + if (output_dest.value === 0) + ImGui.LogToClipboard(); + else + ImGui.LogToTTY(); + ImGui.LogText("ImVec4* colors = ImGui.GetStyle().Colors;" + IM_NEWLINE); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const col: Readonly = style.Colors[i]; + const name: string = ImGui.GetStyleColorName(i); + if (!output_only_modified.value || !col.Equals(ref.Colors[i])) + ImGui.LogText(`colors[ImGuiCol.${name}] = new ImVec4(${col.x.toFixed(2)}, ${col.y.toFixed(2)}, ${col.z.toFixed(2)}, ${col.w.toFixed(2)});` + IM_NEWLINE); + } + ImGui.LogFinish(); + } + ImGui.SameLine(); ImGui.PushItemWidth(120); ImGui.Combo("##output_type", (value = output_dest.value) => output_dest.value = value, "To Clipboard\0To TTY\0"); ImGui.PopItemWidth(); + ImGui.SameLine(); ImGui.Checkbox("Only Modified Colors", (value = output_only_modified.value) => output_only_modified.value = value); + + ImGui.Text("Tip: Left-click on colored square to open color picker,\nRight-click to open edit options menu."); + + /* static */ const filter: Static = STATIC("filter#2223", new ImGuiTextFilter()); + filter.value.Draw("Filter colors", 200); + + /* static */ const alpha_flags: Static = STATIC("alpha_flags", 0); + ImGui.RadioButton("Opaque", (value = alpha_flags.value) => alpha_flags.value = value, 0); ImGui.SameLine(); + ImGui.RadioButton("Alpha", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreview); ImGui.SameLine(); + ImGui.RadioButton("Both", (value = alpha_flags.value) => alpha_flags.value = value, ImGuiColorEditFlags.AlphaPreviewHalf); + + ImGui.BeginChild("#colors", new ImVec2(0, 300), true, ImGuiWindowFlags.AlwaysVerticalScrollbar | ImGuiWindowFlags.AlwaysHorizontalScrollbar); + ImGui.PushItemWidth(-160); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i); + if (!filter.value.PassFilter(name)) + continue; + ImGui.PushID(i); + ImGui.ColorEdit4("##color", style.Colors[i], ImGuiColorEditFlags.AlphaBar | alpha_flags.value); + if (!style.Colors[i].Equals(ref.Colors[i])) + { + // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons. + // Read the FAQ and extra_fonts/README.txt about using icon fonts. It's really easy and super convenient! + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Save")) ref.Colors[i].Copy(style.Colors[i]); + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); if (ImGui.Button("Revert")) style.Colors[i].Copy(ref.Colors[i]); + } + ImGui.SameLine(0.0, style.ItemInnerSpacing.x); + ImGui.TextUnformatted(name); + ImGui.PopID(); + } + ImGui.PopItemWidth(); + ImGui.EndChild(); + + ImGui.TreePop(); + } + + // bool fonts_opened = ImGui.TreeNode("Fonts", "Fonts (%d)", ImGui.GetIO().Fonts->Fonts.Size); + const fonts_opened: boolean = ImGui.TreeNode("Fonts"); + if (fonts_opened) + { + const atlas: ImFontAtlas = ImGui.GetIO().Fonts; + if (ImGui.TreeNode("Atlas texture", `Atlas texture (${atlas.TexWidth}x${atlas.TexHeight} pixels)`)) + { + ImGui.Image(atlas.TexID, new ImVec2(atlas.TexWidth, atlas.TexHeight), new ImVec2(0,0), new ImVec2(1,1), new ImColor(255,255,255,255).Value, new ImColor(255,255,255,128).Value); + ImGui.TreePop(); + } + ImGui.PushItemWidth(100); + // for (let i = 0; i < atlas->Fonts.Size; i++) + // { + // ImFont* font = atlas->Fonts[i]; + // ImGui.PushID(font); + // bool font_details_opened = ImGui.TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size); + // ImGui.SameLine(); if (ImGui.SmallButton("Set as default")) ImGui.GetIO().FontDefault = font; + // if (font_details_opened) + // { + // ImGui.PushFont(font); + // ImGui.Text("The quick brown fox jumps over the lazy dog"); + // ImGui.PopFont(); + // ImGui.DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f"); // Scale only this font + // ImGui.SameLine(); ShowHelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)"); + // ImGui.Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent); + // ImGui.Text("Fallback character: '%c' (%d)", font->FallbackChar, font->FallbackChar); + // ImGui.Text("Texture surface: %d pixels (approx) ~ %dx%d", font->MetricsTotalSurface, (int)sqrtf((float)font->MetricsTotalSurface), (int)sqrtf((float)font->MetricsTotalSurface)); + // for (let config_i = 0; config_i < font->ConfigDataCount; config_i++) + // { + // ImFontConfig* cfg = &font->ConfigData[config_i]; + // ImGui.BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH); + // } + // if (ImGui.TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size)) + // { + // // Display all glyphs of the fonts in separate pages of 256 characters + // const ImFontGlyph* glyph_fallback = font->FallbackGlyph; // Forcefully/dodgily make FindGlyph() return null on fallback, which isn't the default behavior. + // font->FallbackGlyph = null; + // for (let base = 0; base < 0x10000; base += 256) + // { + // int count = 0; + // for (let n = 0; n < 256; n++) + // count += font->FindGlyph((ImWchar)(base + n)) ? 1 : 0; + // if (count > 0 && ImGui.TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base+255, count, count > 1 ? "glyphs" : "glyph")) + // { + // float cell_spacing = style.ItemSpacing.y; + // ImVec2 cell_size(font->FontSize * 1, font->FontSize * 1); + // ImVec2 base_pos = ImGui.GetCursorScreenPos(); + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + // for (let n = 0; n < 256; n++) + // { + // ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size.x + cell_spacing), base_pos.y + (n / 16) * (cell_size.y + cell_spacing)); + // ImVec2 cell_p2(cell_p1.x + cell_size.x, cell_p1.y + cell_size.y); + // const ImFontGlyph* glyph = font->FindGlyph((ImWchar)(base+n));; + // draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255,255,255,100) : IM_COL32(255,255,255,50)); + // font->RenderChar(draw_list, cell_size.x, cell_p1, ImGui.GetColorU32(ImGuiCol.Text), (ImWchar)(base+n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string. + // if (glyph && ImGui.IsMouseHoveringRect(cell_p1, cell_p2)) + // { + // ImGui.BeginTooltip(); + // ImGui.Text("Codepoint: U+%04X", base+n); + // ImGui.Separator(); + // ImGui.Text("AdvanceX: %.1f", glyph->AdvanceX); + // ImGui.Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1); + // ImGui.Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1); + // ImGui.EndTooltip(); + // } + // } + // ImGui.Dummy(ImVec2((cell_size.x + cell_spacing) * 16, (cell_size.y + cell_spacing) * 16)); + // ImGui.TreePop(); + // } + // } + // font->FallbackGlyph = glyph_fallback; + // ImGui.TreePop(); + // } + // ImGui.TreePop(); + // } + // ImGui.PopID(); + // } + /* static */ const window_scale: Static = STATIC("window_scale", 1.0); + ImGui.DragFloat("this window scale", (value = window_scale.value) => window_scale.value = value, 0.005, 0.3, 2.0, "%.1f"); // scale only this window + ImGui.DragFloat("global scale", (value = ImGui.GetIO().FontGlobalScale) => ImGui.GetIO().FontGlobalScale = value, 0.005, 0.3, 2.0, "%.1f"); // scale everything + ImGui.PopItemWidth(); + ImGui.SetWindowFontScale(window_scale.value); + ImGui.TreePop(); + } + + ImGui.PopItemWidth(); +} + +// Demonstrate creating a fullscreen menu bar and populating it. +function ShowExampleAppMainMenuBar(): void +{ + if (ImGui.BeginMainMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Edit")) + { + if (ImGui.MenuItem("Undo", "CTRL+Z")) {} + if (ImGui.MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item + ImGui.Separator(); + if (ImGui.MenuItem("Cut", "CTRL+X")) {} + if (ImGui.MenuItem("Copy", "CTRL+C")) {} + if (ImGui.MenuItem("Paste", "CTRL+V")) {} + ImGui.EndMenu(); + } + ImGui.EndMainMenuBar(); + } +} + +function ShowExampleMenuFile(): void +{ + ImGui.MenuItem("(dummy menu)", null, false, false); + if (ImGui.MenuItem("New")) {} + if (ImGui.MenuItem("Open", "Ctrl+O")) {} + if (ImGui.BeginMenu("Open Recent")) + { + ImGui.MenuItem("fish_hat.c"); + ImGui.MenuItem("fish_hat.inl"); + ImGui.MenuItem("fish_hat.h"); + if (ImGui.BeginMenu("More..")) + { + ImGui.MenuItem("Hello"); + ImGui.MenuItem("Sailor"); + if (ImGui.BeginMenu("Recurse..")) + { + ShowExampleMenuFile(); + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + ImGui.EndMenu(); + } + if (ImGui.MenuItem("Save", "Ctrl+S")) {} + if (ImGui.MenuItem("Save As..")) {} + ImGui.Separator(); + if (ImGui.BeginMenu("Options")) + { + /* static */ const enabled: Static = STATIC("enabled", true); + ImGui.MenuItem("Enabled", "", (value = enabled.value) => enabled.value = value); + ImGui.BeginChild("child", new ImVec2(0, 60), true); + for (let i = 0; i < 10; i++) + ImGui.Text(`Scrolling Text ${i}`); + ImGui.EndChild(); + /* static */ const f: Static = STATIC("f#2408", 0.5); + /* static */ const n: Static = STATIC("n", 0); + /* static */ const b: Static = STATIC("b", true); + ImGui.SliderFloat("Value", (value = f.value) => f.value = value, 0.0, 1.0); + ImGui.InputFloat("Input", (value = f.value) => f.value = value, 0.1); + ImGui.Combo("Combo", (value = n.value) => n.value = value, "Yes\0No\0Maybe\0\0"); + ImGui.Checkbox("Check", (value = b.value) => b.value = value); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Colors")) + { + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + for (let i = 0; i < ImGuiCol.COUNT; i++) + { + const name: string = ImGui.GetStyleColorName(i as ImGuiCol); + ImGui.ColorButton(name, ImGui.GetStyleColorVec4(i as ImGuiCol)); + ImGui.SameLine(); + ImGui.MenuItem(name); + } + ImGui.PopStyleVar(); + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Disabled", false)) // Disabled + { + IM_ASSERT(0); + } + if (ImGui.MenuItem("Checked", null, true)) {} + if (ImGui.MenuItem("Quit", "Alt+F4")) {} +} + +// Demonstrate creating a window which gets auto-resized according to its content. +function ShowExampleAppAutoResize(p_open: ImAccess): void +{ + if (!ImGui.Begin("Example: Auto-resizing window", p_open, ImGui.WindowFlags.AlwaysAutoResize)) + { + ImGui.End(); + return; + } + + /* static */ const lines: Static = STATIC("lines#2447", 10); + ImGui.Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop."); + ImGui.SliderInt("Number of lines", (value = lines.value) => lines.value = value, 1, 20); + for (let i = 0; i < lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + `This is line ${i}`); // Pad with space to extend size horizontally + ImGui.End(); +} + +// Demonstrate creating a window with custom resize constraints. +function ShowExampleAppConstrainedResize(p_open: ImAccess): void +{ + class CustomConstraints // Helper functions to demonstrate programmatic constraints + { + public static Square(data: ImGuiSizeConstraintCallbackData): void { + data.DesiredSize.x = data.DesiredSize.y = IM_MAX(data.DesiredSize.x, data.DesiredSize.y); + } + public static Step(data: ImGuiSizeConstraintCallbackData): void { + const step: number = data.UserData; + data.DesiredSize.x = Math.floor(data.DesiredSize.x / step + 0.5) * step; + data.DesiredSize.y = Math.floor(data.DesiredSize.y / step + 0.5) * step; + } + } + + /* static */ const auto_resize: Static = STATIC("auto_resize", false); + /* static */ const type: Static = STATIC("type", 0); + /* static */ const display_lines: Static = STATIC("display_lines", 10); + if (type.value === 0) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 0), new ImVec2(-1, Number.MAX_VALUE)); // Vertical only + if (type.value === 1) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, -1), new ImVec2(Number.MAX_VALUE, -1)); // Horizontal only + if (type.value === 2) ImGui.SetNextWindowSizeConstraints(new ImVec2(100, 100), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE)); // Width > 100, Height > 100 + if (type.value === 3) ImGui.SetNextWindowSizeConstraints(new ImVec2(400, -1), new ImVec2(500, -1)); // Width 400-500 + if (type.value === 4) ImGui.SetNextWindowSizeConstraints(new ImVec2(-1, 400), new ImVec2(-1, 500)); // Height 400-500 + if (type.value === 5) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Square); // Always Square + if (type.value === 6) ImGui.SetNextWindowSizeConstraints(new ImVec2(0, 0), new ImVec2(Number.MAX_VALUE, Number.MAX_VALUE), CustomConstraints.Step, 100);// Fixed Step + + const flags: ImGuiWindowFlags = auto_resize.value ? ImGuiWindowFlags.AlwaysAutoResize : 0; + if (ImGui.Begin("Example: Constrained Resize", p_open, flags)) + { + const desc: string[] = [ + "Resize vertical only", + "Resize horizontal only", + "Width > 100, Height > 100", + "Width 400-500", + "Height 400-500", + "Custom: Always Square", + "Custom: Fixed Steps (100)", + ]; + if (ImGui.Button("200x200")) { ImGui.SetWindowSize(new ImVec2(200, 200)); } ImGui.SameLine(); + if (ImGui.Button("500x500")) { ImGui.SetWindowSize(new ImVec2(500, 500)); } ImGui.SameLine(); + if (ImGui.Button("800x200")) { ImGui.SetWindowSize(new ImVec2(800, 200)); } + ImGui.PushItemWidth(200); + ImGui.Combo("Constraint", (value = type.value) => type.value = value, desc, IM_ARRAYSIZE(desc)); + ImGui.DragInt("Lines", (value = display_lines.value) => display_lines.value = value, 0.2, 1, 100); + ImGui.PopItemWidth(); + ImGui.Checkbox("Auto-resize", (value = auto_resize.value) => auto_resize.value = value); + for (let i = 0; i < display_lines.value; i++) + ImGui.Text(" ".repeat(i * 4) + "Hello, sailor! Making this line long enough for the example."); + } + ImGui.End(); +} + +// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use. +function ShowExampleAppFixedOverlay(p_open: ImAccess): void +{ + const DISTANCE: number = 10.0; + /* static */ const corner: Static = STATIC("corner", 0); + const window_pos: Readonly = new ImVec2((corner.value & 1) ? ImGui.GetIO().DisplaySize.x - DISTANCE : DISTANCE, (corner.value & 2) ? ImGui.GetIO().DisplaySize.y - DISTANCE : DISTANCE); + const window_pos_pivot: Readonly = new ImVec2((corner.value & 1) ? 1.0 : 0.0, (corner.value & 2) ? 1.0 : 0.0); + ImGui.SetNextWindowPos(window_pos, ImGuiCond.Always, window_pos_pivot); + ImGui.PushStyleColor(ImGuiCol.WindowBg, new ImVec4(0.0, 0.0, 0.0, 0.3)); // Transparent background + if (ImGui.Begin("Example: Fixed Overlay", p_open, ImGuiWindowFlags.NoTitleBar|ImGuiWindowFlags.NoResize|ImGuiWindowFlags.AlwaysAutoResize|ImGuiWindowFlags.NoMove|ImGuiWindowFlags.NoSavedSettings)) + { + ImGui.Text("Simple overlay\nin the corner of the screen.\n(right-click to change position)"); + ImGui.Separator(); + ImGui.Text(`Mouse Position: (${ImGui.GetIO().MousePos.x.toFixed(1)},${ImGui.GetIO().MousePos.y.toFixed(1)})`); + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.MenuItem("Top-left", null, corner.value === 0)) corner.value = 0; + if (ImGui.MenuItem("Top-right", null, corner.value === 1)) corner.value = 1; + if (ImGui.MenuItem("Bottom-left", null, corner.value === 2)) corner.value = 2; + if (ImGui.MenuItem("Bottom-right", null, corner.value === 3)) corner.value = 3; + ImGui.EndPopup(); + } + ImGui.End(); + } + ImGui.PopStyleColor(); +} + +// Demonstrate using "##" and "###" in identifiers to manipulate ID generation. +// This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. +function ShowExampleAppWindowTitles(p_open: ImAccess): void +{ + // By default, Windows are uniquely identified by their title. + // You can use the "##" and "###" markers to manipulate the display/ID. + + // Using "##" to display same title but have unique identifier. + ImGui.SetNextWindowPos(new ImVec2(100,100), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##1"); + ImGui.Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique."); + ImGui.End(); + + ImGui.SetNextWindowPos(new ImVec2(100,200), ImGuiCond.FirstUseEver); + ImGui.Begin("Same title as another window##2"); + ImGui.Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique."); + ImGui.End(); + + // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" + const buf: string = `Animated title ${"|/-\\".charAt((ImGui.GetTime()/0.25)&3)} ${ImGui.GetFrameCount()}###AnimatedTitle`; + ImGui.SetNextWindowPos(new ImVec2(100,300), ImGuiCond.FirstUseEver); + ImGui.Begin(buf); + ImGui.Text("This window has a changing title."); + ImGui.End(); +} + +// Demonstrate using the low-level ImDrawList to draw custom shapes. +function ShowExampleAppCustomRendering(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(350,560), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Custom rendering", p_open)) + { + ImGui.End(); + return; + } + + // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc. + // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4. + // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types) + // In this example we are not using the maths operators! + // ImDrawList* draw_list = ImGui.GetWindowDrawList(); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + // Primitives + ImGui.Text("Primitives"); + /* static */ const sz: Static = STATIC("sz", 36.0); + /* static */ const col: Static = STATIC("color#2583", new ImVec4(1.0,1.0,0.4,1.0)); + ImGui.DragFloat("Size", (value = sz.value) => sz.value = value, 0.2, 2.0, 72.0, "%.0f"); + ImGui.ColorEdit3("Color", col.value) + { + const p: Readonly = ImGui.GetCursorScreenPos(); + const col32: ImU32 = IM_COL32(col.value.x*255, col.value.y*255, col.value.z*255, col.value.w*255); + let x: number = p.x + 4.0, y: number = p.y + 4.0, spacing: number = 8.0; + for (let n = 0; n < 2; n++) + { + const thickness: number = (n === 0) ? 1.0 : 4.0; + draw_list.AddCircle(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 20, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 0.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.All, thickness); x += sz.value+spacing; + draw_list.AddRect(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight, thickness); x += sz.value+spacing; + draw_list.AddTriangle(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y ), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, thickness); x += sz.value+spacing; + draw_list.AddLine(new ImVec2(x, y), new ImVec2(x, y+sz.value), col32, thickness); x += spacing; + draw_list.AddBezierCurve(new ImVec2(x, y), new ImVec2(x+sz.value*1.3,y+sz.value*0.3), new ImVec2(x+sz.value-sz.value*1.3,y+sz.value-sz.value*0.3), new ImVec2(x+sz.value, y+sz.value), col32, thickness); + x = p.x + 4; + y += sz.value+spacing; + } + draw_list.AddCircleFilled(new ImVec2(x+sz.value*0.5, y+sz.value*0.5), sz.value*0.5, col32, 32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0); x += sz.value+spacing; + draw_list.AddRectFilled(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), col32, 10.0, ImDrawCornerFlags.TopLeft|ImDrawCornerFlags.BotRight); x += sz.value+spacing; + draw_list.AddTriangleFilled(new ImVec2(x+sz.value*0.5, y), new ImVec2(x+sz.value,y+sz.value-0.5), new ImVec2(x,y+sz.value-0.5), col32); x += sz.value+spacing; + draw_list.AddRectFilledMultiColor(new ImVec2(x, y), new ImVec2(x+sz.value, y+sz.value), IM_COL32(0,0,0), IM_COL32(255,0,0), IM_COL32(255,255,0), IM_COL32(0,255,0)); + ImGui.Dummy(new ImVec2((sz.value+spacing)*8, (sz.value+spacing)*3)); + } + ImGui.Separator(); + { + /* static */ const points: Static> = STATIC("points", new ImVector()); + /* static */ const adding_line: Static = STATIC("adding_line", false); + ImGui.Text("Canvas example"); + if (ImGui.Button("Clear")) points.value.clear(); + if (points.value.Size >= 2) { ImGui.SameLine(); if (ImGui.Button("Undo")) { points.value.pop_back(); points.value.pop_back(); } } + ImGui.Text("Left-click and drag to add lines,\nRight-click to undo"); + + // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered() + // However you can draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos(). + // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max). + const canvas_pos: ImVec2 = ImGui.GetCursorScreenPos(); // ImDrawList API uses screen coordinates! + const canvas_size: ImVec2 = ImGui.GetContentRegionAvail(); // Resize canvas to what's available + if (canvas_size.x < 50.0) canvas_size.x = 50.0; + if (canvas_size.y < 50.0) canvas_size.y = 50.0; + draw_list.AddRectFilledMultiColor(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50,50,50), IM_COL32(50,50,60), IM_COL32(60,60,70), IM_COL32(50,50,60)); + draw_list.AddRect(canvas_pos, new ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255,255,255)); + + let adding_preview: boolean = false; + ImGui.InvisibleButton("canvas", canvas_size); + const mouse_pos_in_canvas: ImVec2 = new ImVec2(ImGui.GetIO().MousePos.x - canvas_pos.x, ImGui.GetIO().MousePos.y - canvas_pos.y); + if (adding_line.value) + { + adding_preview = true; + points.value.push_back(mouse_pos_in_canvas); + if (!ImGui.GetIO().MouseDown[0]) + adding_line.value = adding_preview = false; + } + if (ImGui.IsItemHovered()) + { + if (!adding_line.value && ImGui.IsMouseClicked(0)) + { + points.value.push_back(mouse_pos_in_canvas); + adding_line.value = true; + } + if (ImGui.IsMouseClicked(1) && !points.value.empty()) + { + adding_line.value = adding_preview = false; + points.value.pop_back(); + points.value.pop_back(); + } + } + draw_list.PushClipRect(canvas_pos, new ImVec2(canvas_pos.x+canvas_size.x, canvas_pos.y+canvas_size.y), true); // clip lines within the canvas (if we resize it, etc.) + for (let i = 0; i < points.value.Size - 1; i += 2) + draw_list.AddLine(new ImVec2(canvas_pos.x + points.value.Data[i].x, canvas_pos.y + points.value.Data[i].y), new ImVec2(canvas_pos.x + points.value.Data[i+1].x, canvas_pos.y + points.value.Data[i+1].y), IM_COL32(255,255,0,255), 2.0); + draw_list.PopClipRect(); + if (adding_preview) + points.value.pop_back(); + } + ImGui.End(); +} + +// Demonstrating creating a simple console window, with scrolling, filtering, completion and history. +// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions. +class ExampleAppConsole { + // char InputBuf[256]; + InputBuf: ImStringBuffer = new ImStringBuffer(256, ""); + // ImVector Items; + Items: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + // ImVector History; + History: ImVector = new ImVector(); + // int HistoryPos; // -1: new line, 0..History.Size-1 browsing history. + HistoryPos: number = -1; + // ImVector Commands; + Commands: ImVector = new ImVector(); + + constructor() { + this.ClearLog(); + // memset(InputBuf, 0, sizeof(InputBuf)); + this.InputBuf.buffer = ""; + this.HistoryPos = -1; + this.Commands.push_back("HELP"); + this.Commands.push_back("HISTORY"); + this.Commands.push_back("CLEAR"); + this.Commands.push_back("CLASSIFY"); // "classify" is here to provide an example of "C"+[tab] completing to "CL" and displaying matches. + this.AddLog("Welcome to ImGui!"); + } + + delete(): void {} + + // Portable helpers + // static int Stricmp(const char* str1, const char* str2) { int d; while ((d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; } return d; } + // static int Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) === 0 && *str1) { str1++; str2++; n--; } return d; } + // static char* Strdup(const char *str) { size_t len = strlen(str) + 1; void* buff = malloc(len); return (char*)memcpy(buff, (const void*)str, len); } + + ClearLog(): void { + // for (let i = 0; i < Items.Size; i++) + // free(Items[i]); + this.Items.clear(); + this.ScrollToBottom = true; + } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void { + // FIXME-OPT + // char buf[1024]; + // va_list args; + // va_start(args, fmt); + // vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args); + // buf[IM_ARRAYSIZE(buf)-1] = 0; + // va_end(args); + // Items.push_back(Strdup(buf)); + this.Items.push_back(fmt); + this.ScrollToBottom = true; + } + + // void Draw(const char* title, bool* p_open) + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin(title, p_open)) + { + ImGui.End(); + return; + } + + // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar. + // Here we create a context menu only available from the title bar. + if (ImGui.BeginPopupContextItem()) + { + if (ImGui.MenuItem("Close")) + // *p_open = false; + p_open(false); + ImGui.EndPopup(); + } + + ImGui.TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc."); + ImGui.TextWrapped("Enter 'HELP' for help, press TAB to use text completion."); + + // TODO: display items starting from the bottom + + if (ImGui.SmallButton("Add Dummy Text")) { this.AddLog(`${this.Items.Size} some text`); this.AddLog("some more text"); this.AddLog("display very important message here!"); } ImGui.SameLine(); + if (ImGui.SmallButton("Add Dummy Error")) { this.AddLog("[error] something went wrong"); } ImGui.SameLine(); + if (ImGui.SmallButton("Clear")) { this.ClearLog(); } ImGui.SameLine(); + const copy_to_clipboard: boolean = ImGui.SmallButton("Copy"); ImGui.SameLine(); + if (ImGui.SmallButton("Scroll to bottom")) this.ScrollToBottom = true; + // /* static */ const t: Static = getStatic("t", 0.0); if (ImGui.GetTime() - t > 0.02) { t = ImGui.GetTime(); this.AddLog(`Spam ${t}`); } + + ImGui.Separator(); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(0,0)); + /* static */ const filter: Static = STATIC("filter#2763", new ImGuiTextFilter()); + filter.value.Draw("Filter (\"incl,-excl\") (\"error\")", 180); + ImGui.PopStyleVar(); + ImGui.Separator(); + + const footer_height_to_reserve: number = ImGui.GetStyle().ItemSpacing.y + ImGui.GetFrameHeightWithSpacing(); // 1 separator, 1 input text + ImGui.BeginChild("ScrollingRegion", new ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags.HorizontalScrollbar); // Leave room for 1 separator + 1 InputText + if (ImGui.BeginPopupContextWindow()) + { + if (ImGui.Selectable("Clear")) this.ClearLog(); + ImGui.EndPopup(); + } + + // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui.TextUnformatted(log.begin(), log.end()); + // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items. + // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements. + // To use the clipper we could replace the 'for (let i = 0; i < Items.Size; i++)' loop with: + // ImGuiListClipper clipper(Items.Size); + // while (clipper.Step()) + // for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + // However take note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list. + // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter, + // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code! + // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(4,1)); // Tighten spacing + if (copy_to_clipboard) + ImGui.LogToClipboard(); + for (let i = 0; i < this.Items.Size; i++) + { + // const char* item = Items[i]; + const item: string = this.Items.Data[i]; + if (!filter.value.PassFilter(item)) + continue; + // ImVec4 col = ImVec4(1.0f,1.0f,1.0f,1.0f); // A better implementation may store a type per-item. For the sample let's just parse the text. + let col: ImVec4 = new ImVec4(1.0,1.0,1.0,1.0); // A better implementation may store a type per-item. For the sample let's just parse the text. + // if (strstr(item, "[error]")) col = ImColor(1.0f,0.4f,0.4f,1.0f); + if (/\[error\]/.test(item)) col = new ImVec4(1.0,0.4,0.4,1.0); + // else if (strncmp(item, "# ", 2) === 0) col = ImColor(1.0f,0.78f,0.58f,1.0f); + else if (/^# /.test(item)) col = new ImVec4(1.0,0.78,0.58,1.0); + ImGui.PushStyleColor(ImGuiCol.Text, col); + ImGui.TextUnformatted(item); + ImGui.PopStyleColor(); + } + if (copy_to_clipboard) + ImGui.LogFinish(); + if (this.ScrollToBottom) + ImGui.SetScrollHere(); + this.ScrollToBottom = false; + ImGui.PopStyleVar(); + ImGui.EndChild(); + ImGui.Separator(); + + // Command-line + if (ImGui.InputText("Input", this.InputBuf, IM_ARRAYSIZE(this.InputBuf), ImGuiInputTextFlags.EnterReturnsTrue|ImGuiInputTextFlags.CallbackCompletion|ImGuiInputTextFlags.CallbackHistory, ExampleAppConsole.TextEditCallbackStub, this)) + { + // char* input_end = InputBuf+strlen(InputBuf); + // while (input_end > InputBuf && input_end[-1] === ' ') { input_end--; } *input_end = 0; + this.InputBuf.buffer = this.InputBuf.buffer.trim(); + // if (InputBuf[0]) + if (this.InputBuf.buffer.length > 0) + this.ExecCommand(this.InputBuf.buffer); + // strcpy(InputBuf, ""); + this.InputBuf.buffer = ""; + } + + // Demonstrate keeping auto focus on the input box + if (ImGui.IsItemHovered() || (ImGui.IsWindowFocused(ImGuiFocusedFlags.RootAndChildWindows) && !ImGui.IsAnyItemActive() && !ImGui.IsMouseClicked(0))) + ImGui.SetKeyboardFocusHere(-1); // Auto focus previous widget + + ImGui.End(); + } + + // void ExecCommand(const char* command_line) + ExecCommand(command_line: string): void + { + this.AddLog(`# ${command_line}\n`); + + // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal. + this.HistoryPos = -1; + for (let i = this.History.Size-1; i >= 0; i--) + // if (Stricmp(History[i], command_line) === 0) + if (this.History.Data[i].toLowerCase() === command_line.toLowerCase()) + { + // free(History[i]); + // History.erase(History.begin() + i); + break; + } + // History.push_back(Strdup(command_line)); + this.History.push_back(command_line); + + // Process command + // if (Stricmp(command_line, "CLEAR") === 0) + if (command_line.toUpperCase() === "CLEAR") + { + this.ClearLog(); + } + // else if (Stricmp(command_line, "HELP") === 0) + else if (command_line.toUpperCase() === "HELP") + { + this.AddLog("Commands:"); + for (let i = 0; i < this.Commands.Size; i++) + this.AddLog(`- ${this.Commands.Data[i]}`); + } + // else if (Stricmp(command_line, "HISTORY") === 0) + else if (command_line.toUpperCase() === "HISTORY") + { + const first: number = this.History.Size - 10; + for (let i = first > 0 ? first : 0; i < this.History.Size; i++) + this.AddLog(`${i}: ${this.History.Data[i]}\n`); + } + else + { + this.AddLog(`Unknown command: '${command_line}'\n`); + } + } + + // static const TextEditCallbackStub: number(ImGuiTextEditCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks + static TextEditCallbackStub(data: ImGuiTextEditCallbackData): number + { + // ExampleAppConsole* console = (ExampleAppConsole*)data->UserData; + const console: ExampleAppConsole = data.UserData as ExampleAppConsole; + return console.TextEditCallback(data); + } + + // int TextEditCallback(ImGuiTextEditCallbackData* data) + TextEditCallback(data: ImGuiTextEditCallbackData): number + { + //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd); + switch (data.EventFlag) + { + case ImGuiInputTextFlags.CallbackCompletion: + { + // Example of TEXT COMPLETION + + // Locate beginning of current word + // const char* word_end = data->Buf + data->CursorPos; + // const char* word_start = word_end; + // while (word_start > data->Buf) + // { + // const char c = word_start[-1]; + // if (c === ' ' || c === '\t' || c === ',' || c === ';') + // break; + // word_start--; + // } + + // // Build a list of candidates + // ImVector candidates; + // for (let i = 0; i < Commands.Size; i++) + // if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) === 0) + // candidates.push_back(Commands[i]); + + // if (candidates.Size === 0) + // { + // // No match + // AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); + // } + // else if (candidates.Size === 1) + // { + // // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing + // data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0]); + // data->InsertChars(data->CursorPos, " "); + // } + // else + // { + // // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY" + // int match_len = (int)(word_end - word_start); + // for (;;) + // { + // int c = 0; + // bool all_candidates_matches = true; + // for (let i = 0; i < candidates.Size && all_candidates_matches; i++) + // if (i === 0) + // c = toupper(candidates[i][match_len]); + // else if (c === 0 || c !== toupper(candidates[i][match_len])) + // all_candidates_matches = false; + // if (!all_candidates_matches) + // break; + // match_len++; + // } + + // if (match_len > 0) + // { + // data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); + // data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); + // } + + // // List matches + // AddLog("Possible matches:\n"); + // for (let i = 0; i < candidates.Size; i++) + // AddLog("- %s\n", candidates[i]); + // } + + break; + } + case ImGuiInputTextFlags.CallbackHistory: + { + // Example of HISTORY + // const int prev_history_pos = HistoryPos; + // if (data->EventKey === ImGuiKey_UpArrow) + // { + // if (HistoryPos === -1) + // HistoryPos = History.Size - 1; + // else if (HistoryPos > 0) + // HistoryPos--; + // } + // else if (data->EventKey === ImGuiKey_DownArrow) + // { + // if (HistoryPos !== -1) + // if (++HistoryPos >= History.Size) + // HistoryPos = -1; + // } + + // // A better implementation would preserve the data on the current input line along with cursor position. + // if (prev_history_pos !== HistoryPos) + // { + // data->CursorPos = data->SelectionStart = data->SelectionEnd = data->BufTextLen = (int)snprintf(data->Buf, (size_t)data->BufSize, "%s", (HistoryPos >= 0) ? History[HistoryPos] : ""); + // data->BufDirty = true; + // } + } + } + return 0; + } +} + +function ShowExampleAppConsole(p_open: ImAccess): void +{ + /* static */ const console: Static = STATIC("console", new ExampleAppConsole()); + console.value.Draw("Example: Console", p_open); +} + +// Usage: +// static ExampleAppLog my_log; +// my_log.AddLog("Hello %d world\n", 123); +// my_log.Draw("title"); +class ExampleAppLog +{ + // ImGuiTextBuffer Buf; + Buf: ImGuiTextBuffer = new ImGuiTextBuffer(); + // ImGuiTextFilter Filter; + Filter: ImGuiTextFilter = new ImGuiTextFilter(); + // ImVector LineOffsets; // Index to lines offset + LineOffsets: ImVector = new ImVector(); + // bool ScrollToBottom; + ScrollToBottom: boolean = false; + + // void Clear() { Buf.clear(); LineOffsets.clear(); } + Clear(): void { this.Buf.clear(); this.LineOffsets.clear(); } + + // void AddLog(const char* fmt, ...) IM_FMTARGS(2) + AddLog(fmt: string): void + { + let old_size: number = this.Buf.size(); + // va_list args; + // va_start(args, fmt); + // Buf.appendfv(fmt, args); + // va_end(args); + this.Buf.append(fmt); + for (let new_size = this.Buf.size(); old_size < new_size; old_size++) + if (this.Buf.Buf[old_size] === '\n') + this.LineOffsets.push_back(old_size); + this.ScrollToBottom = true; + } + + Draw(title: string, p_open: ImAccess): void + { + ImGui.SetNextWindowSize(new ImVec2(500,400), ImGuiCond.FirstUseEver); + ImGui.Begin(title, p_open); + if (ImGui.Button("Clear")) this.Clear(); + ImGui.SameLine(); + const copy: boolean = ImGui.Button("Copy"); + ImGui.SameLine(); + this.Filter.Draw("Filter", -100.0); + ImGui.Separator(); + ImGui.BeginChild("scrolling", new ImVec2(0,0), false, ImGuiWindowFlags.HorizontalScrollbar); + if (copy) ImGui.LogToClipboard(); + + if (this.Filter.IsActive()) + { + // const char* buf_begin = Buf.begin(); + // const char* line = buf_begin; + // for (let line_no = 0; line !== null; line_no++) + // { + // const char* line_end = (line_no < LineOffsets.Size) ? buf_begin + LineOffsets[line_no] : null; + // if (Filter.PassFilter(line, line_end)) + // ImGui.TextUnformatted(line, line_end); + // line = line_end && line_end[1] ? line_end + 1 : null; + // } + } + else + { + ImGui.TextUnformatted(this.Buf.begin()); + } + + if (this.ScrollToBottom) + ImGui.SetScrollHere(1.0); + this.ScrollToBottom = false; + ImGui.EndChild(); + ImGui.End(); + } +} + +// Demonstrate creating a simple log window with basic filtering. +function ShowExampleAppLog(p_open: ImAccess): void +{ + /* static */ const log: Static = STATIC("log#3073", new ExampleAppLog()); + + // Demo: add random items (unless Ctrl is held) + /* static */ const last_time: Static = STATIC("last_time", -1.0); + const time: number = ImGui.GetTime(); + if (time - last_time.value >= 0.20 && !ImGui.GetIO().KeyCtrl) + { + const random_words: string[] = [ "system", "info", "warning", "error", "fatal", "notice", "log" ]; + // log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui.GetFrameCount()); + log.value.AddLog(`[${random_words[Math.floor(Math.random() * IM_ARRAYSIZE(random_words))]}] Hello, time is ${time.toFixed(1)}, frame count is ${ImGui.GetFrameCount()}\n`); + last_time.value = time; + } + + log.value.Draw("Example: Log", p_open); +} + +// Demonstrate create a window with multiple child windows. +function ShowExampleAppLayout(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(500, 440), ImGuiCond.FirstUseEver); + if (ImGui.Begin("Example: Layout", p_open, ImGuiWindowFlags.MenuBar)) + { + if (ImGui.BeginMenuBar()) + { + if (ImGui.BeginMenu("File")) + { + if (ImGui.MenuItem("Close")) p_open(false); + ImGui.EndMenu(); + } + ImGui.EndMenuBar(); + } + + // left + /* static */ const selected: Static = STATIC("selected#3106", 0); + ImGui.BeginChild("left pane", new ImVec2(150, 0), true); + for (let i = 0; i < 100; i++) + { + const label: string = `MyObject ${i}`; + if (ImGui.Selectable(label, selected.value === i)) + selected.value = i; + } + ImGui.EndChild(); + ImGui.SameLine(); + + // right + ImGui.BeginGroup(); + ImGui.BeginChild("item view", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); // Leave room for 1 line below us + ImGui.Text(`MyObject: ${selected}`); + ImGui.Separator(); + ImGui.TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "); + ImGui.EndChild(); + if (ImGui.Button("Revert")) {} + ImGui.SameLine(); + if (ImGui.Button("Save")) {} + ImGui.EndGroup(); + } + ImGui.End(); +} + +// Demonstrate create a simple property editor. +function ShowExampleAppPropertyEditor(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(430,450), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Property editor", p_open)) + { + ImGui.End(); + return; + } + + ShowHelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui.SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API."); + + ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new ImVec2(2,2)); + ImGui.Columns(2); + ImGui.Separator(); + + class funcs + { + static ShowDummyObject(prefix: string, uid: number): void + { + ImGui.PushID(uid); // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID. + ImGui.AlignTextToFramePadding(); // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high. + const node_open: boolean = ImGui.TreeNode("Object", `${prefix}_${uid}`); + ImGui.NextColumn(); + ImGui.AlignTextToFramePadding(); + ImGui.Text("my sailor is rich"); + ImGui.NextColumn(); + if (node_open) + { + /* static */ const dummy_members: Static = STATIC("dummy_members", [ 0.0,0.0,1.0,3.1416,100.0,999.0 ]); + for (let i = 0; i < 8; i++) + { + ImGui.PushID(i); // Use field index as identifier. + if (i < 2) + { + funcs.ShowDummyObject("Child", 424242); + } + else + { + ImGui.AlignTextToFramePadding(); + // Here we use a Selectable (instead of Text) to highlight on hover + //ImGui.Text(`Field_${i}`); + const label: string = `Field_${i}`; + ImGui.Bullet(); + ImGui.Selectable(label); + ImGui.NextColumn(); + ImGui.PushItemWidth(-1); + const ref: ImScalar = [ dummy_members.value[i] || 0 ]; + if (i >= 5) + ImGui.InputFloat("##value", ref, 1.0); + else + ImGui.DragFloat("##value", ref, 0.01); + dummy_members.value[i] = ref[0]; + ImGui.PopItemWidth(); + ImGui.NextColumn(); + } + ImGui.PopID(); + } + ImGui.TreePop(); + } + ImGui.PopID(); + } + } + + // Iterate dummy objects with dummy members (all the same data) + for (let obj_i = 0; obj_i < 3; obj_i++) + funcs.ShowDummyObject("Object", obj_i); + + ImGui.Columns(1); + ImGui.Separator(); + ImGui.PopStyleVar(); + ImGui.End(); +} + +// Demonstrate/test rendering huge amount of text, and the incidence of clipping. +function ShowExampleAppLongText(p_open: ImAccess): void +{ + ImGui.SetNextWindowSize(new ImVec2(520,600), ImGuiCond.FirstUseEver); + if (!ImGui.Begin("Example: Long text display", p_open)) + { + ImGui.End(); + return; + } + + /* static */ const test_type: Static = STATIC("test_type", 0); + /* static */ const log: Static = STATIC("log#3217", new ImGuiTextBuffer()); + /* static */ const lines: Static = STATIC("lines#3218", 0); + ImGui.Text("Printing unusually long amount of text."); + ImGui.Combo("Test type", (value = test_type.value) => test_type.value = value, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped manually\0Multiple calls to Text(), not clipped (slow)\0"); + ImGui.Text(`Buffer contents: ${lines.value} lines, ${log.value.size()} bytes`); + if (ImGui.Button("Clear")) { log.value.clear(); lines.value = 0; } + ImGui.SameLine(); + if (ImGui.Button("Add 1000 lines")) + { + for (let i = 0; i < 1000; i++) + log.value.append(`${lines.value+i} The quick brown fox jumps over the lazy dog\n`); + lines.value += 1000; + } + ImGui.BeginChild("Log"); + switch (test_type.value) + { + case 0: + // Single call to TextUnformatted() with a big buffer + // ImGui.TextUnformatted(log.begin(), log.end()); + ImGui.TextUnformatted(log.value.begin()); + break; + case 1: + { + // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper. + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + const clipper: ImGuiListClipper = new ImGuiListClipper(lines.value); + while (clipper.Step()) + for (let i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + // clipper.delete(); // NOTE: native emscripten class + ImGui.PopStyleVar(); + break; + } + case 2: + // Multiple calls to Text(), not clipped (slow) + ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new ImVec2(0,0)); + for (let i = 0; i < lines.value; i++) + ImGui.Text(`${i} The quick brown fox jumps over the lazy dog`); + ImGui.PopStyleVar(); + break; + } + ImGui.EndChild(); + ImGui.End(); +} + +// End of Demo code +// #else + +// export function ShowDemoWindow(p_open: ImAccess): void {} +// export function ShowUserGuide(): void {} +// export function ShowStyleSelector(label: string): boolean { return false; } +// export function ShowFontSelector(label: string): void {} +// export function ShowStyleEditor(ref: ImGuiStyle | null = null): void {} + +// #endif diff --git a/imgui_memory_editor.js b/imgui_memory_editor.js new file mode 100644 index 0000000..e9f27e2 --- /dev/null +++ b/imgui_memory_editor.js @@ -0,0 +1,448 @@ +"use strict"; +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. +Object.defineProperty(exports, "__esModule", { value: true }); +// #pragma once +// #include // sprintf, scanf +const ImGui = require("./imgui"); +const imgui_1 = require("./imgui"); +const imgui_2 = require("./imgui"); +const imgui_3 = require("./imgui"); +class MemoryEditor { + constructor() { + // typedef unsigned char u8; + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + this.Open = false; + // bool ReadOnly; // = false // set to true to disable any editing + this.ReadOnly = false; + // int Rows; // = 16 // + this.Rows = 16; + // bool OptShowAscii; // = true // + this.OptShowAscii = true; + // bool OptShowHexII; // = false // + this.OptShowHexII = false; + // bool OptGreyOutZeroes; // = true // + this.OptGreyOutZeroes = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + this.OptMidRowsCount = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + this.OptAddrDigitsCount = 0; + // ImU32 HighlightColor; // // color of highlight + this.HighlightColor = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + this.ReadFn = null; + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + this.WriteFn = null; + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + this.HighlightFn = null; + // State/Internals + // bool ContentsWidthChanged; + this.ContentsWidthChanged = false; + // size_t DataEditingAddr; + this.DataEditingAddr = -1; + // bool DataEditingTakeFocus; + this.DataEditingTakeFocus = false; + // char DataInputBuf[32]; + this.DataInputBuf = new imgui_1.ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + this.AddrInputBuf = new imgui_1.ImStringBuffer(32, ""); + // size_t GotoAddr; + this.GotoAddr = -1; + // size_t HighlightMin, HighlightMax; + this.HighlightMin = -1; + this.HighlightMax = -1; + } + GotoAddrAndHighlight(addr_min, addr_max) { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + CalcSizes(s, mem_size, base_display_addr) { + const style = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n, pad = 0) { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + static sscanf_PRISizeT(s) { + return parseInt(s, 16); + } + // Standalone Memory Editor window + DrawWindow(title, mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new imgui_2.ImVec2(0.0, 0.0), new imgui_2.ImVec2(s.WindowWidth, Number.MAX_VALUE)); + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, 8 /* NoScrollbar */)) { + if (ImGui.IsWindowHovered(2 /* RootWindow */ | 1 /* ChildWindows */) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new imgui_2.ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + // Memory Editor contents only + DrawContents(mem_data, mem_size = mem_data.byteLength, base_display_addr = 0x0000) { + const s = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style = ImGui.GetStyle(); + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new imgui_2.ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list = ImGui.GetWindowDrawList(); + ImGui.PushStyleVar(9 /* FramePadding */, new imgui_2.ImVec2(0, 0)); + ImGui.PushStyleVar(12 /* ItemSpacing */, new imgui_2.ImVec2(0, 0)); + const line_total_count = 0 | ((mem_size + this.Rows - 1) / this.Rows); + const clipper = new imgui_3.ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr = clipper.DisplayStart * this.Rows; + const visible_end_addr = clipper.DisplayEnd * this.Rows; + let data_next = false; + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + const data_editing_addr_backup = this.DataEditingAddr; + let data_editing_addr_next = -1; + if (this.DataEditingAddr !== -1) { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(3 /* UpArrow */)) && this.DataEditingAddr >= this.Rows) { + data_editing_addr_next = this.DataEditingAddr - this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(4 /* DownArrow */)) && this.DataEditingAddr < mem_size - this.Rows) { + data_editing_addr_next = this.DataEditingAddr + this.Rows; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(1 /* LeftArrow */)) && this.DataEditingAddr > 0) { + data_editing_addr_next = this.DataEditingAddr - 1; + this.DataEditingTakeFocus = true; + } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(2 /* RightArrow */)) && this.DataEditingAddr < mem_size - 1) { + data_editing_addr_next = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) { + // Track cursor movements + const scroll_offset = (0 | (data_editing_addr_next / this.Rows) - 0 | (data_editing_addr_backup / this.Rows)); + const scroll_desired = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + // Draw vertical separator + const window_pos = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new imgui_2.ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(5 /* Border */)); + const color_text = ImGui.GetColorU32(0 /* Text */); + const color_disabled = this.OptGreyOutZeroes ? ImGui.GetColorU32(1 /* TextDisabled */) : color_text; + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) { + let addr = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + let byte_pos_x = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) { + const pos = ImGui.GetCursorScreenPos(); + let highlight_width = s.GlyphWidth * 2; + const is_next_byte_highlighted = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + if (this.DataEditingAddr === addr) { + // Display text input on current byte + let data_write = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data) { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags = 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */ | 16 /* AutoSelectAll */ | 4096 /* NoHorizontalScroll */ | 8192 /* AlwaysInsertMode */ | 256 /* CallbackAlways */; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) { + let data_input_value = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + if (this.OptShowHexII) { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + if (this.OptShowAscii) { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new imgui_2.ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) { + if (addr === this.DataEditingAddr) { + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(7 /* FrameBg */)); + draw_list.AddRectFilled(pos, new imgui_2.ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(40 /* TextSelectedBg */)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + if (data_next && this.DataEditingAddr < mem_size) { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) { + this.DataEditingAddr = data_editing_addr_next; + } + ImGui.Separator(); + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) + this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) + this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, 2 /* CharsHexadecimal */ | 32 /* EnterReturnsTrue */)) { + // size_t goto_addr; + const goto_addr = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + if (this.GotoAddr !== -1) { + if (this.GotoAddr < mem_size) { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} +exports.MemoryEditor = MemoryEditor; +(function (MemoryEditor) { + class Sizes { + constructor() { + this.AddrDigitsCount = 0; + this.LineHeight = 0.0; + this.GlyphWidth = 0.0; + this.HexCellWidth = 0.0; + this.SpacingBetweenMidRows = 0.0; + this.PosHexStart = 0.0; + this.PosHexEnd = 0.0; + this.PosAsciiStart = 0.0; + this.PosAsciiEnd = 0.0; + this.WindowWidth = 0.0; + } + } + MemoryEditor.Sizes = Sizes; +})(MemoryEditor = exports.MemoryEditor || (exports.MemoryEditor = {})); +// #undef _PRISizeT +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1ndWlfbWVtb3J5X2VkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImltZ3VpX21lbW9yeV9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGtFQUFrRTtBQUNsRSxzRUFBc0U7QUFDdEUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRiw0REFBNEQ7QUFDNUQseUtBQXlLO0FBQ3pLLEVBQUU7QUFDRixTQUFTO0FBQ1QsNkdBQTZHO0FBQzdHLDRLQUE0SztBQUM1SyxFQUFFO0FBQ0YsU0FBUztBQUNULG9DQUFvQztBQUNwQyw0QkFBNEI7QUFDNUIsZ0VBQWdFO0FBQ2hFLGlCQUFpQjtBQUNqQixFQUFFO0FBQ0YsYUFBYTtBQUNiLDJCQUEyQjtBQUMzQiw4R0FBOEc7QUFDOUcsNEVBQTRFO0FBQzVFLHNIQUFzSDtBQUN0SCw2SEFBNkg7QUFDN0gsMkRBQTJEO0FBQzNELG9HQUFvRztBQUNwRywrRUFBK0U7QUFDL0UseUlBQXlJO0FBQ3pJLDhJQUE4STtBQUM5SSwyTEFBMkw7QUFDM0wsMEhBQTBIO0FBQzFILGdHQUFnRztBQUNoRyxxREFBcUQ7QUFDckQsRUFBRTtBQUNGLGFBQWE7QUFDYiw4SUFBOEk7O0FBRTlJLGVBQWU7QUFDZix3Q0FBd0M7QUFFeEMsaUNBQWlDO0FBSWpDLG1DQUF5QztBQUV6QyxtQ0FBaUM7QUFFakMsbUNBQTJDO0FBSTNDO0lBQUE7UUFFSSw0QkFBNEI7UUFFNUIsV0FBVztRQUNYLG1KQUFtSjtRQUM1SSxTQUFJLEdBQVksS0FBSyxDQUFDO1FBQzdCLDRHQUE0RztRQUNyRyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHlFQUF5RTtRQUNsRSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHlFQUF5RTtRQUNsRSxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUNwQyx5RUFBeUU7UUFDbEUsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDckMseUVBQXlFO1FBQ2xFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUN4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 \ No newline at end of file diff --git a/imgui_memory_editor.ts b/imgui_memory_editor.ts new file mode 100644 index 0000000..08e4234 --- /dev/null +++ b/imgui_memory_editor.ts @@ -0,0 +1,500 @@ +// Mini memory editor for Dear ImGui (to embed in your game/tools) +// Animated GIF: https://twitter.com/ocornut/status/894242704317530112 +// Get latest version at http://www.github.com/ocornut/imgui_club +// +// You can adjust the keyboard repeat delay/rate in ImGuiIO. +// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui.PushFont()/PopFont() to switch to a mono-space font before caling this. +// +// Usage: +// static MemoryEditor mem_edit_1; // store your state somewhere +// mem_edit_1.DrawWindow("Memory Editor", mem_block, mem_block_size, 0x0000); // create a window and draw memory editor (if you already have a window, use DrawContents()) +// +// Usage: +// static MemoryEditor mem_edit_2; +// ImGui.Begin("MyWindow") +// mem_edit_2.DrawContents(this, sizeof(*this), (size_t)this); +// ImGui.End(); +// +// Changelog: +// - v0.10: initial version +// - v0.11: always refresh active text input with the latest byte from source memory if it's not being edited. +// - v0.12: added this.OptMidRowsCount to allow extra spacing every XX rows. +// - v0.13: added optional ReadFn/WriteFn handlers to access memory via a function. various warning fixes for 64-bits. +// - v0.14: added GotoAddr member, added GotoAddrAndHighlight() and highlighting. fixed minor scrollbar glitch when resizing. +// - v0.15: added maximum window width. minor optimization. +// - v0.16: added OptGreyOutZeroes option. various sizing fixes when resizing using the "Rows" drag. +// - v0.17: added HighlightFn handler for optional non-contiguous highlighting. +// - v0.18: fixes for displaying 64-bits addresses, fixed mouse click gaps introduced in recent changes, cursor tracking scrolling fixes. +// - v0.19: fixed auto-focus of next byte leaving WantCaptureKeyboard=false for one frame. we now capture the keyboard during that transition. +// - v0.20: added options menu. added this.OptShowAscii checkbox. added optional HexII display. split Draw() in DrawWindow()/DrawContents(). fixing glyph width. refactoring/cleaning code. +// - v0.21: fixes for using DrawContents() in our own window. fixed HexII to actually be useful and not on the wrong side. +// - v0.22: clicking Ascii view select the byte in the Hex view. Ascii view highlight selection. +// - v0.23: fixed right-arrow triggering a byte write +// +// Todo/Bugs: +// - Arrows are being sent to the InputText() about to disappear which for LeftArrow makes the text cursor appear at position 1 for one frame. + +// #pragma once +// #include // sprintf, scanf + +import * as ImGui from "./imgui"; +import { ImGuiCol } from "./imgui"; +import { ImGuiWindowFlags } from "./imgui"; +import { ImGuiHoveredFlags } from "./imgui"; +import { ImStringBuffer } from "./imgui"; +import { ImU32 } from "./imgui"; +import { ImVec2 } from "./imgui"; +import { ImGuiStyle } from "./imgui"; +import { ImGuiListClipper } from "./imgui"; +import { ImDrawList } from "./imgui"; +import { ImGuiTextEditCallbackData } from "./imgui"; + +export class MemoryEditor +{ + // typedef unsigned char u8; + + // Settings + // bool Open; // = true // set to false when DrawWindow() was closed. ignore if not using DrawWindow + public Open: boolean = false; + // bool ReadOnly; // = false // set to true to disable any editing + public ReadOnly: boolean = false; + // int Rows; // = 16 // + public Rows: number = 16; + // bool OptShowAscii; // = true // + public OptShowAscii: boolean = true; + // bool OptShowHexII; // = false // + public OptShowHexII: boolean = false; + // bool OptGreyOutZeroes; // = true // + public OptGreyOutZeroes: boolean = true; + // int OptMidRowsCount; // = 8 // set to 0 to disable extra spacing between every mid-rows + public OptMidRowsCount: number = 8; + // int OptAddrDigitsCount; // = 0 // number of addr digits to display (default calculated based on maximum displayed addr) + public OptAddrDigitsCount: number = 0; + // ImU32 HighlightColor; // // color of highlight + public HighlightColor: ImU32 = ImGui.IM_COL32(255, 255, 255, 40); + // u8 (*ReadFn)(u8* data, size_t off); // = NULL // optional handler to read bytes + public ReadFn: ((data: ArrayBuffer, off: number) => number) | null = null + // void (*WriteFn)(u8* data, size_t off, u8 d); // = NULL // optional handler to write bytes + public WriteFn: ((data: ArrayBuffer, off: number, d: number) => void) | null = null + // bool (*HighlightFn)(u8* data, size_t off); // = NULL // optional handler to return Highlight property (to support non-contiguous highlighting) + public HighlightFn: ((data: ArrayBuffer, off: number) => boolean) | null = null; + + // State/Internals + // bool ContentsWidthChanged; + public ContentsWidthChanged: boolean = false; + // size_t DataEditingAddr; + public DataEditingAddr: number = -1; + // bool DataEditingTakeFocus; + public DataEditingTakeFocus: boolean = false; + // char DataInputBuf[32]; + public DataInputBuf: ImStringBuffer = new ImStringBuffer(32, ""); + // char AddrInputBuf[32]; + public AddrInputBuf: ImStringBuffer = new ImStringBuffer(32, ""); + // size_t GotoAddr; + public GotoAddr: number = -1; + // size_t HighlightMin, HighlightMax; + public HighlightMin: number = -1; + public HighlightMax: number = -1; + + public GotoAddrAndHighlight(addr_min: number, addr_max: number): void + { + this.GotoAddr = addr_min; + this.HighlightMin = addr_min; + this.HighlightMax = addr_max; + } + + // struct Sizes + // { + // int AddrDigitsCount; + // float LineHeight; + // float GlyphWidth; + // float HexCellWidth; + // float SpacingBetweenMidRows; + // float PosHexStart; + // float PosHexEnd; + // float PosAsciiStart; + // float PosAsciiEnd; + // float WindowWidth; + // }; + + public CalcSizes(s: MemoryEditor.Sizes, mem_size: number, base_display_addr: number): void + { + const style: ImGuiStyle = ImGui.GetStyle(); + s.AddrDigitsCount = this.OptAddrDigitsCount; + if (s.AddrDigitsCount === 0) + for (let n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + s.AddrDigitsCount++; + s.LineHeight = ImGui.GetTextLineHeight(); + s.GlyphWidth = ImGui.CalcTextSize("F").x + 1; // We assume the font is mono-space + s.HexCellWidth = Math.floor(s.GlyphWidth * 2.5); // "FF " we include trailing space in the width to easily catch clicks everywhere + s.SpacingBetweenMidRows = Math.floor(s.HexCellWidth * 0.25); // Every this.OptMidRowsCount columns we add a bit of extra spacing + s.PosHexStart = (s.AddrDigitsCount + 2) * s.GlyphWidth; + s.PosHexEnd = s.PosHexStart + (s.HexCellWidth * this.Rows); + s.PosAsciiStart = s.PosAsciiEnd = s.PosHexEnd; + if (this.OptShowAscii) + { + s.PosAsciiStart = s.PosHexEnd + s.GlyphWidth * 1; + if (this.OptMidRowsCount > 0) + s.PosAsciiStart += ((this.Rows + this.OptMidRowsCount - 1) / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + s.PosAsciiEnd = s.PosAsciiStart + this.Rows * s.GlyphWidth; + } + s.WindowWidth = s.PosAsciiEnd + style.ScrollbarSize + style.WindowPadding.x * 2 + s.GlyphWidth; + } + + // #ifdef _MSC_VER + // #define _PRISizeT "IX" + // #else + // #define _PRISizeT "zX" + // #endif + static sprintf_PRISizeT(n: number, pad: number = 0): string { + return ("0".repeat(pad) + n.toString(16).toUpperCase()).substr(-pad); + } + + static sscanf_PRISizeT(s: string): number { + return parseInt(s, 16); + } + + // Standalone Memory Editor window + public DrawWindow(title: string, mem_data: ArrayBuffer, mem_size: number = mem_data.byteLength, base_display_addr: number = 0x000): void + { + const s: MemoryEditor.Sizes = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + // ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, FLT_MAX)); + ImGui.SetNextWindowSizeConstraints(new ImVec2(0.0, 0.0), new ImVec2(s.WindowWidth, Number.MAX_VALUE)); + + // this.Open = true; + // if (ImGui.Begin(title, &Open, ImGuiWindowFlags_NoScrollbar)) + if (ImGui.Begin(title, (value = this.Open) => this.Open = value, ImGuiWindowFlags.NoScrollbar)) + { + if (ImGui.IsWindowHovered(ImGuiHoveredFlags.RootWindow | ImGuiHoveredFlags.ChildWindows) && ImGui.IsMouseClicked(1)) + ImGui.OpenPopup("context"); + this.DrawContents(mem_data, mem_size, base_display_addr); + if (this.ContentsWidthChanged) + { + this.CalcSizes(s, mem_size, base_display_addr); + ImGui.SetWindowSize(new ImVec2(s.WindowWidth, ImGui.GetWindowSize().y)); + } + } + ImGui.End(); + } + + // Memory Editor contents only + public DrawContents(mem_data: ArrayBuffer, mem_size: number = mem_data.byteLength, base_display_addr: number = 0x0000): void + { + const s: MemoryEditor.Sizes = new MemoryEditor.Sizes(); + this.CalcSizes(s, mem_size, base_display_addr); + const style: ImGuiStyle = ImGui.GetStyle(); + + // ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetItemsLineHeightWithSpacing())); + ImGui.BeginChild("##scrolling", new ImVec2(0, -ImGui.GetFrameHeightWithSpacing())); + const draw_list: ImDrawList = ImGui.GetWindowDrawList(); + + ImGui.PushStyleVar(ImGui.StyleVar.FramePadding, new ImVec2(0, 0)); + ImGui.PushStyleVar(ImGui.StyleVar.ItemSpacing, new ImVec2(0, 0)); + + const line_total_count: number = 0|((mem_size + this.Rows - 1) / this.Rows); + const clipper: ImGuiListClipper = new ImGuiListClipper(line_total_count, s.LineHeight); + const visible_start_addr: number = clipper.DisplayStart * this.Rows; + const visible_end_addr: number = clipper.DisplayEnd * this.Rows; + + let data_next: boolean = false; + + if (this.ReadOnly || this.DataEditingAddr >= mem_size) + this.DataEditingAddr = -1; + + const data_editing_addr_backup: number = this.DataEditingAddr; + let data_editing_addr_next: number = -1; + if (this.DataEditingAddr !== -1) + { + // Move cursor but only apply on next frame so scrolling with be synchronized (because currently we can't change the scrolling while the window is being rendered) + if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.UpArrow)) && this.DataEditingAddr >= this.Rows) { data_editing_addr_next = this.DataEditingAddr - this.Rows; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.DownArrow)) && this.DataEditingAddr < mem_size - this.Rows) { data_editing_addr_next = this.DataEditingAddr + this.Rows; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.LeftArrow)) && this.DataEditingAddr > 0) { data_editing_addr_next = this.DataEditingAddr - 1; this.DataEditingTakeFocus = true; } + else if (ImGui.IsKeyPressed(ImGui.GetKeyIndex(ImGui.Key.RightArrow)) && this.DataEditingAddr < mem_size - 1) { data_editing_addr_next = this.DataEditingAddr + 1; this.DataEditingTakeFocus = true; } + } + if (data_editing_addr_next !== -1 && (data_editing_addr_next / this.Rows) !== (data_editing_addr_backup / this.Rows)) + { + // Track cursor movements + const scroll_offset: number = (0|(data_editing_addr_next / this.Rows) - 0|(data_editing_addr_backup / this.Rows)); + const scroll_desired: boolean = (scroll_offset < 0 && data_editing_addr_next < visible_start_addr + this.Rows * 2) || (scroll_offset > 0 && data_editing_addr_next > visible_end_addr - this.Rows * 2); + if (scroll_desired) + ImGui.SetScrollY(ImGui.GetScrollY() + scroll_offset * s.LineHeight); + } + + // Draw vertical separator + const window_pos: ImVec2 = ImGui.GetWindowPos(); + if (this.OptShowAscii) + draw_list.AddLine(new ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y), new ImVec2(window_pos.x + s.PosAsciiStart - s.GlyphWidth, window_pos.y + 9999), ImGui.GetColorU32(ImGuiCol.Border)); + + const color_text: ImU32 = ImGui.GetColorU32(ImGuiCol.Text); + const color_disabled: ImU32 = this.OptGreyOutZeroes ? ImGui.GetColorU32(ImGuiCol.TextDisabled) : color_text; + + for (let line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) // display only visible lines + { + let addr: number = (line_i * this.Rows); + // ImGui.Text("%0*" _PRISizeT ": ", s.AddrDigitsCount, base_display_addr + addr); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount)}: `); + + // Draw Hexadecimal + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) + { + let byte_pos_x: number = s.PosHexStart + s.HexCellWidth * n; + if (this.OptMidRowsCount > 0) + byte_pos_x += (n / this.OptMidRowsCount) * s.SpacingBetweenMidRows; + ImGui.SameLine(byte_pos_x); + + // Draw highlight + if ((addr >= this.HighlightMin && addr < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr))) + { + const pos: ImVec2 = ImGui.GetCursorScreenPos(); + let highlight_width: number = s.GlyphWidth * 2; + const is_next_byte_highlighted: boolean = (addr + 1 < mem_size) && ((this.HighlightMax !== -1 && addr + 1 < this.HighlightMax) || (this.HighlightFn && this.HighlightFn(mem_data, addr + 1) || false)); + if (is_next_byte_highlighted || (n + 1 === this.Rows)) + { + highlight_width = s.HexCellWidth; + if (this.OptMidRowsCount > 0 && n > 0 && (n + 1) < this.Rows && ((n + 1) % this.OptMidRowsCount) === 0) + highlight_width += s.SpacingBetweenMidRows; + } + draw_list.AddRectFilled(pos, new ImVec2(pos.x + highlight_width, pos.y + s.LineHeight), this.HighlightColor); + } + + if (this.DataEditingAddr === addr) + { + // Display text input on current byte + let data_write: boolean = false; + ImGui.PushID(addr); + if (this.DataEditingTakeFocus) + { + ImGui.SetKeyboardFocusHere(); + ImGui.CaptureKeyboardFromApp(true); + // sprintf(AddrInputBuf, "%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr + addr); + this.AddrInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(base_display_addr + addr, s.AddrDigitsCount); + // sprintf(DataInputBuf, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + this.DataInputBuf.buffer = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + } + ImGui.PushItemWidth(s.GlyphWidth * 2); + // struct UserData + // { + // // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + // static int Callback(ImGuiTextEditCallbackData* data) + // { + // UserData* user_data = (UserData*)data->UserData; + // if (!data->HasSelection()) + // user_data->CursorPos = data->CursorPos; + // if (data->SelectionStart === 0 && data->SelectionEnd === data->BufTextLen) + // { + // // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + // data->DeleteChars(0, data->BufTextLen); + // data->InsertChars(0, user_data->CurrentBufOverwrite); + // data->SelectionStart = 0; + // data->SelectionEnd = data->CursorPos = 2; + // } + // return 0; + // } + // char CurrentBufOverwrite[3]; // Input + // int CursorPos; // Output + // }; + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. This is such a ugly mess we may be better off not using InputText() at all here. + function Callback(data: ImGuiTextEditCallbackData): number + { + if (!data.HasSelection()) + user_data.CursorPos = data.CursorPos; + if (data.SelectionStart === 0 && data.SelectionEnd === data.BufTextLen) + { + // When not editing a byte, always rewrite its content (this is a bit tricky, since InputText technically "owns" the master copy of the buffer we edit it in there) + data.DeleteChars(0, data.BufTextLen); + data.InsertChars(0, user_data.CurrentBufOverwrite); + data.SelectionStart = 0; + data.SelectionEnd = data.CursorPos = 2; + } + return 0; + } + // UserData user_data; + // user_data.CursorPos = -1; + const user_data = { + CurrentBufOverwrite: "", + CursorPos: -1 + }; + // sprintf(user_data.CurrentBufOverwrite, "%02X", ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]); + user_data.CurrentBufOverwrite = MemoryEditor.sprintf_PRISizeT(this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr], 2); + const flags: ImGui.InputTextFlags = ImGui.InputTextFlags.CharsHexadecimal | ImGui.InputTextFlags.EnterReturnsTrue | ImGui.InputTextFlags.AutoSelectAll | ImGui.InputTextFlags.NoHorizontalScroll | ImGui.InputTextFlags.AlwaysInsertMode | ImGui.InputTextFlags.CallbackAlways; + // if (ImGui.InputText("##data", DataInputBuf, 32, flags, UserData::Callback, &user_data)) + if (ImGui.InputText("##data", this.DataInputBuf, this.DataInputBuf.size, flags, Callback, user_data)) + data_write = data_next = true; + else if (!this.DataEditingTakeFocus && !ImGui.IsItemActive()) + this.DataEditingAddr = data_editing_addr_next = -1; + this.DataEditingTakeFocus = false; + ImGui.PopItemWidth(); + if (user_data.CursorPos >= 2) + data_write = data_next = true; + if (data_editing_addr_next !== -1) + data_write = data_next = false; + // int data_input_value; + // if (data_write && sscanf(DataInputBuf, "%X", &data_input_value) === 1) + if (data_write) + { + let data_input_value: number = MemoryEditor.sscanf_PRISizeT(this.DataInputBuf.buffer); + if (this.WriteFn) + // WriteFn(mem_data, addr, (u8)data_input_value); + this.WriteFn(mem_data, addr, data_input_value); + else + // mem_data[addr] = (u8)data_input_value; + new Uint8Array(mem_data)[addr] = data_input_value; + } + ImGui.PopID(); + } + else + { + // NB: The trailing space is not visible but ensure there's no gap that the mouse cannot click on. + // u8 b = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const b: number = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + + if (this.OptShowHexII) + { + if ((b >= 32 && b < 128)) + // ImGui.Text(".%c ", b); + ImGui.Text(`.${String.fromCharCode(b)} `); + else if (b === 0xFF && this.OptGreyOutZeroes) + ImGui.TextDisabled("## "); + else if (b === 0x00) + ImGui.Text(" "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + else + { + if (b === 0 && this.OptGreyOutZeroes) + ImGui.TextDisabled("00 "); + else + // ImGui.Text("%02X ", b); + // ImGui.Text(`${("00" + b.toString(16).toUpperCase()).substr(-2)} `); + ImGui.Text(`${MemoryEditor.sprintf_PRISizeT(b, 2)} `); + } + if (!this.ReadOnly && ImGui.IsItemHovered() && ImGui.IsMouseClicked(0)) + { + this.DataEditingTakeFocus = true; + data_editing_addr_next = addr; + } + } + } + + if (this.OptShowAscii) + { + // Draw ASCII values + ImGui.SameLine(s.PosAsciiStart); + const pos: ImVec2 = ImGui.GetCursorScreenPos(); + addr = line_i * this.Rows; + ImGui.PushID(line_i); + if (ImGui.InvisibleButton("ascii", new ImVec2(s.PosAsciiEnd - s.PosAsciiStart, s.LineHeight))) + { + this.DataEditingAddr = addr + ((ImGui.GetIO().MousePos.x - pos.x) / s.GlyphWidth); + this.DataEditingTakeFocus = true; + } + ImGui.PopID(); + for (let n = 0; n < this.Rows && addr < mem_size; n++, addr++) + { + if (addr === this.DataEditingAddr) + { + draw_list.AddRectFilled(pos, new ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(ImGuiCol.FrameBg)); + draw_list.AddRectFilled(pos, new ImVec2(pos.x + s.GlyphWidth, pos.y + s.LineHeight), ImGui.GetColorU32(ImGuiCol.TextSelectedBg)); + } + // unsigned char c = ReadFn ? ReadFn(mem_data, addr) : mem_data[addr]; + const c: number = this.ReadFn ? this.ReadFn(mem_data, addr) : new Uint8Array(mem_data)[addr]; + // char display_c = (c < 32 || c >= 128) ? '.' : c; + const display_c: string = (c < 32 || c >= 128) ? "." : String.fromCharCode(c); + // draw_list->AddText(pos, (display_c === '.') ? color_disabled : color_text, &display_c, &display_c + 1); + draw_list.AddText(pos, (display_c === ".") ? color_disabled : color_text, display_c); + pos.x += s.GlyphWidth; + } + } + } + clipper.End(); + clipper.delete(); + ImGui.PopStyleVar(2); + ImGui.EndChild(); + + if (data_next && this.DataEditingAddr < mem_size) + { + this.DataEditingAddr = this.DataEditingAddr + 1; + this.DataEditingTakeFocus = true; + } + else if (data_editing_addr_next !== -1) + { + this.DataEditingAddr = data_editing_addr_next; + } + + ImGui.Separator(); + + // Options menu + if (ImGui.Button("Options")) + ImGui.OpenPopup("context"); + if (ImGui.BeginPopup("context")) + { + ImGui.PushItemWidth(56); + // if (ImGui.DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) ContentsWidthChanged = true; + if (ImGui.DragInt("##rows", (_ = this.Rows) => this.Rows = _, 0.2, 4, 32, "%.0f rows")) this.ContentsWidthChanged = true; + ImGui.PopItemWidth(); + // ImGui.Checkbox("Show HexII", &OptShowHexII); + ImGui.Checkbox("Show HexII", (_ = this.OptShowHexII) => this.OptShowHexII = _); + // if (ImGui.Checkbox("Show Ascii", &this.OptShowAscii)) ContentsWidthChanged = true; + if (ImGui.Checkbox("Show Ascii", (_ = this.OptShowAscii) => this.OptShowAscii = _)) this.ContentsWidthChanged = true; + // ImGui.Checkbox("Grey out zeroes", &OptGreyOutZeroes); + ImGui.Checkbox("Grey out zeroes", (_ = this.OptGreyOutZeroes) => this.OptGreyOutZeroes = _); + ImGui.EndPopup(); + } + + ImGui.SameLine(); + // ImGui.Text("Range %0*" _PRISizeT "..%0*" _PRISizeT, s.AddrDigitsCount, base_display_addr, s.AddrDigitsCount, base_display_addr + mem_size - 1); + ImGui.Text(`Range ${MemoryEditor.sprintf_PRISizeT(base_display_addr, s.AddrDigitsCount)}..${MemoryEditor.sprintf_PRISizeT(base_display_addr + mem_size - 1, s.AddrDigitsCount)}`); + ImGui.SameLine(); + ImGui.PushItemWidth((s.AddrDigitsCount + 1) * s.GlyphWidth + style.FramePadding.x * 2.0); + // if (ImGui.InputText("##addr", AddrInputBuf, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + if (ImGui.InputText("##addr", this.AddrInputBuf, this.AddrInputBuf.size, ImGui.InputTextFlags.CharsHexadecimal | ImGui.InputTextFlags.EnterReturnsTrue)) + { + // size_t goto_addr; + const goto_addr: number = MemoryEditor.sscanf_PRISizeT(this.AddrInputBuf.buffer); + console.log("goto_addr", goto_addr.toString(16)); + // if (sscanf(AddrInputBuf, "%" _PRISizeT, &goto_addr) === 1) + // { + this.GotoAddr = goto_addr - base_display_addr; + this.HighlightMin = this.HighlightMax = -1; + // } + } + ImGui.PopItemWidth(); + + if (this.GotoAddr !== -1) + { + if (this.GotoAddr < mem_size) + { + ImGui.BeginChild("##scrolling"); + ImGui.SetScrollFromPosY(ImGui.GetCursorStartPos().y + (this.GotoAddr / this.Rows) * ImGui.GetTextLineHeight()); + ImGui.EndChild(); + this.DataEditingAddr = this.GotoAddr; + this.DataEditingTakeFocus = true; + } + this.GotoAddr = -1; + } + + // Notify the main window of our ideal child content size (FIXME: we are missing an API to get the contents size from the child) + ImGui.SetCursorPosX(s.WindowWidth); + } +} + +export namespace MemoryEditor { + export class Sizes { + public AddrDigitsCount: number /* int */ = 0; + public LineHeight: number /* float */ = 0.0; + public GlyphWidth: number /* float */ = 0.0; + public HexCellWidth: number /* float */ = 0.0; + public SpacingBetweenMidRows: number /* float */ = 0.0; + public PosHexStart: number /* float */ = 0.0; + public PosHexEnd: number /* float */ = 0.0; + public PosAsciiStart: number /* float */ = 0.0; + public PosAsciiEnd: number /* float */ = 0.0; + public WindowWidth: number /* float */ = 0.0; + } +} + +// #undef _PRISizeT \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..14b2278 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "imgui-js", + "version": "1.0.0", + "description": "JavaScript bindings for Dear ImGui using Emscripten and TypeScript", + "main": "imgui.js", + "types": "imgui.ts", + "scripts": { + "dev": "http-server", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "@types/emscripten": "0.0.31", + "@types/node": "^4.0.36", + "@types/systemjs": "^0.20.6", + "http-server": "^0.11.1", + "systemjs": "^0.20.19", + "typescript": "^2.7.1" + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..82713f7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "inlineSourceMap": true, + "strict": true + }, + "files": [ + "imconfig.ts", + "imgui.ts", + "imgui_demo.ts", + "imgui_memory_editor.ts" + ] +} \ No newline at end of file